python_developer
💢Canny Edge Detection💢
4.Non-maximum Suppression
پس از اندازه گیری و جهت شیب، یک اسکن کامل از تصویر برای حذف هر پیکسل ناخواسته که ممکن است لبه را تشکیل ندهد انجام می شود.
پس از اندازه گیری و جهت شیب، یک اسکن کامل از تصویر برای حذف هر پیکسل ناخواسته که ممکن است لبه را تشکیل ندهد انجام می شود.
5. Hysteresis Thresholding
این مرحله تصمیم می گیرد که کدام لبه ها واقعا لبه ها هستند و کدام نیستند.
برای این منظور، ما نیاز به دو مقدار آستانه، minVal و maxVal داریم.
✅هر لبه با گرادیان شدت بیش
از maxVal مطمئنا لبه میباشد.
وآنهاییکه زیر minVal هستند ، مطمئنا غیر لبه هستند، بنابراین دور انداخته میشوند.
آنهاییکه بین این دو آستانه می افتند، بر اساس اتصال آنها به لبه ها یا غیر لبه ها طبقه بندی می شوند. اگر آنها به پیکسل های "sure-edge" متصل شوند، آنها به عنوان بخشی از لبه ها در نظر گرفته می شوند. در غیر این صورت، آنها نیز دور انداخته می شوند. تصویر زیر را ببینید:
💢💢💢💢💢💢
این مرحله تصمیم می گیرد که کدام لبه ها واقعا لبه ها هستند و کدام نیستند.
برای این منظور، ما نیاز به دو مقدار آستانه، minVal و maxVal داریم.
✅هر لبه با گرادیان شدت بیش
از maxVal مطمئنا لبه میباشد.
وآنهاییکه زیر minVal هستند ، مطمئنا غیر لبه هستند، بنابراین دور انداخته میشوند.
آنهاییکه بین این دو آستانه می افتند، بر اساس اتصال آنها به لبه ها یا غیر لبه ها طبقه بندی می شوند. اگر آنها به پیکسل های "sure-edge" متصل شوند، آنها به عنوان بخشی از لبه ها در نظر گرفته می شوند. در غیر این صورت، آنها نیز دور انداخته می شوند. تصویر زیر را ببینید:
💢💢💢💢💢💢
import cv2
import numpy as np
from matplotlib import pyplot as plt
img = cv2.imread('messi5.jpg',0)
edges = cv2.Canny(img,100,200)
plt.subplot(121),plt.imshow(img,cmap = 'gray')
plt.title('Original Image'), plt.xticks([]), plt.yticks([])
plt.subplot(122),plt.imshow(edges,cmap = 'gray')
plt.title('Edge Image'), plt.xticks([]), plt.yticks([])
plt.show()
💢💢💢💢💢💢
import numpy as np
from matplotlib import pyplot as plt
img = cv2.imread('messi5.jpg',0)
edges = cv2.Canny(img,100,200)
plt.subplot(121),plt.imshow(img,cmap = 'gray')
plt.title('Original Image'), plt.xticks([]), plt.yticks([])
plt.subplot(122),plt.imshow(edges,cmap = 'gray')
plt.title('Edge Image'), plt.xticks([]), plt.yticks([])
plt.show()
💢💢💢💢💢💢
💢Template Matching💢
تطبیق الگو:
پیدا کردن اشیا در تصویر با استفاده از توابع cv2.matchTemplate(), cv2.minMaxLoc()
〰〰〰〰〰〰
✅تطبیق الگو، یک روش برای جستجوی و پیدا کردن محل تصویر یک الگو ، در تصویر بزرگتر است. که opencv با استفاده از
تابع cv2.matchTemplate() این کار را انجام میدهد.
💢💢
تطبیق الگو:
پیدا کردن اشیا در تصویر با استفاده از توابع cv2.matchTemplate(), cv2.minMaxLoc()
〰〰〰〰〰〰
✅تطبیق الگو، یک روش برای جستجوی و پیدا کردن محل تصویر یک الگو ، در تصویر بزرگتر است. که opencv با استفاده از
تابع cv2.matchTemplate() این کار را انجام میدهد.
💢💢
import cv2
import numpy as np
from matplotlib import pyplot as plt
img = cv2.imread('normal_avazak_ir-sport47.jpg',0)
img2 = img.copy()
template = cv2.imread('messi_face.jpg',0)
w,h = template.shape[::-1]
# All the 6 methods for comparison in a list
methods = ['cv2.TM_CCOEFF', 'cv2.TM_CCOEFF_NORMED', 'cv2.TM_CCORR','cv2.TM_CCORR_NORMED', 'cv2.TM_SQDIFF', 'cv2.TM_SQDIFF_NORMED']
for meth in methods:
img = img2.copy()
method = eval(meth)
# Apply template Matching
res = cv2.matchTemplate(img,template,method)
min_val, max_val, min_loc, max_loc = cv2.minMaxLoc(res)
# If the method is TM_SQDIFF or TM_SQDIFF_NORMED, take minimum
if method in [cv2.TM_SQDIFF, cv2.TM_SQDIFF_NORMED]:
top_left = min_loc
else:
top_left = max_loc
bottom_right = (top_left[0] + w, top_left[1] + h)
cv2.rectangle(img,top_left, bottom_right, 255, 2)
plt.subplot(121),plt.imshow(res,cmap = 'gray')
plt.title('Matching Result'), plt.xticks([]), plt.yticks([])
plt.subplot(122),plt.imshow(img,cmap = 'gray')
plt.title('Detected Point'), plt.xticks([]), plt.yticks([])
plt.suptitle(meth)
plt.show()
import numpy as np
from matplotlib import pyplot as plt
img = cv2.imread('normal_avazak_ir-sport47.jpg',0)
img2 = img.copy()
template = cv2.imread('messi_face.jpg',0)
w,h = template.shape[::-1]
# All the 6 methods for comparison in a list
methods = ['cv2.TM_CCOEFF', 'cv2.TM_CCOEFF_NORMED', 'cv2.TM_CCORR','cv2.TM_CCORR_NORMED', 'cv2.TM_SQDIFF', 'cv2.TM_SQDIFF_NORMED']
for meth in methods:
img = img2.copy()
method = eval(meth)
# Apply template Matching
res = cv2.matchTemplate(img,template,method)
min_val, max_val, min_loc, max_loc = cv2.minMaxLoc(res)
# If the method is TM_SQDIFF or TM_SQDIFF_NORMED, take minimum
if method in [cv2.TM_SQDIFF, cv2.TM_SQDIFF_NORMED]:
top_left = min_loc
else:
top_left = max_loc
bottom_right = (top_left[0] + w, top_left[1] + h)
cv2.rectangle(img,top_left, bottom_right, 255, 2)
plt.subplot(121),plt.imshow(res,cmap = 'gray')
plt.title('Matching Result'), plt.xticks([]), plt.yticks([])
plt.subplot(122),plt.imshow(img,cmap = 'gray')
plt.title('Detected Point'), plt.xticks([]), plt.yticks([])
plt.suptitle(meth)
plt.show()
💢Template Matching with Multiple Objects💢
تطبیق الگو با چندین اشیا
در بخش قبلی، ما تصویری را برای چهره مسی پیدا کردیم که فقط یک بار در تصویر رخ می دهد.
فرض کنید شما در جستجوی یک شی هستید که چندین بار در تصویر،
رخ داده است،ولی cv2.minMaxLoc () تمام مکان های شما را نمی دهد.
در این مورد، از آستانه استفاده خواهیم کرد.
ما از تصویر ی از بازی Mario استفاده خواهیم کرد و سکه ها را در آن پیدا خواهیم کرد.
💢💢💢💢💢
تطبیق الگو با چندین اشیا
در بخش قبلی، ما تصویری را برای چهره مسی پیدا کردیم که فقط یک بار در تصویر رخ می دهد.
فرض کنید شما در جستجوی یک شی هستید که چندین بار در تصویر،
رخ داده است،ولی cv2.minMaxLoc () تمام مکان های شما را نمی دهد.
در این مورد، از آستانه استفاده خواهیم کرد.
ما از تصویر ی از بازی Mario استفاده خواهیم کرد و سکه ها را در آن پیدا خواهیم کرد.
💢💢💢💢💢
import cv2
import numpy as np
from matplotlib import pyplot as plt
img_rgb = cv2.imread('111.png')
img_gray = cv2.cvtColor(img_rgb, cv2.COLOR_BGR2GRAY)
template = cv2.imread('1111.PNG',0)
w, h = template.shape[::-1]
res = cv2.matchTemplate(img_gray,template,cv2.TM_CCOEFF_NORMED)
threshold = 0.8
loc = np.where( res >= threshold)
for pt in zip(*loc[::-1]):
cv2.rectangle(img_rgb, pt, (pt[0] + w, pt[1] + h), (0,0,255), 2)
cv2.imwrite('res.png',img_rgb)
💢💢💢💢
import numpy as np
from matplotlib import pyplot as plt
img_rgb = cv2.imread('111.png')
img_gray = cv2.cvtColor(img_rgb, cv2.COLOR_BGR2GRAY)
template = cv2.imread('1111.PNG',0)
w, h = template.shape[::-1]
res = cv2.matchTemplate(img_gray,template,cv2.TM_CCOEFF_NORMED)
threshold = 0.8
loc = np.where( res >= threshold)
for pt in zip(*loc[::-1]):
cv2.rectangle(img_rgb, pt, (pt[0] + w, pt[1] + h), (0,0,255), 2)
cv2.imwrite('res.png',img_rgb)
💢💢💢💢
تصویر res.png را که داخل پوشه ایجاد شده را باز میکنیم:
💢💢💢
💢💢💢