Matching Contours

Kategori: Python / OpenCV , 09 Ekim 2019 , JanFranco


Bir objeyi resim içerisinde aratıp, o objeye benzeyen objeleri alabiliriz. Görelim:


import cv2
import numpy as np

template = cv2.imread('4star.jpg',0)
cv2.imshow('Template', template)
cv2.waitKey()

target = cv2.imread('images/shapestomatch.jpg')
target_gray = cv2.cvtColor(target,cv2.COLOR_BGR2GRAY)

ret, thresh1 = cv2.threshold(template, 127, 255, 0)
ret, thresh2 = cv2.threshold(target_gray, 127, 255, 0)

contours, hierarchy = cv2.findContours(thresh1, cv2.RETR_CCOMP, cv2.CHAIN_APPROX_SIMPLE)

sorted_contours = sorted(contours, key=cv2.contourArea, reverse=True)

template_contour = contours[1]

contours, hierarchy = cv2.findContours(thresh2, cv2.RETR_CCOMP, cv2.CHAIN_APPROX_SIMPLE)

for c in contours:
    match = cv2.matchShapes(template_contour, c, 3, 0.0)
    print(match)
    if match < 0.15:
        closest_contour = c
    else:
        closest_contour = [] 
                
cv2.drawContours(target, [closest_contour], -1, (0,255,0), 3)
cv2.imshow('Output', target)
cv2.waitKey()
cv2.destroyAllWindows()
Burada önemli noktalara değinelim:


sorted_contours = sorted(contours, key=cv2.contourArea, reverse=True)

template_contour = contours[1]
Bu tarz bir işlem yapmamızın sebebi şudur, template resmimizin arkaplanı beyazdır ve findContours methodu bu arkaplanı da bir obje olarak algılar. Bu nedenle iki obje varmış gibi davranır. Biz de burada büyükten küçüğe göre objeleri sıraladığımızda, 0. indexteki obje arkaplan, 1. indexteki obje bizim objemiz olur.


match = cv2.matchShapes(template_contour, c, 3, 0.0)
    if match < 0.15:
        closest_contour = c
matchShaped methodunun parametrelerini açıklayalım. İlk parametre bulanacak olan obje, ikinci parametre eşleştirilecek objedir. Üçüncü parametre match typedır. 1, 2 ve 3 girilebilir ve değişen şey matematiksel hesaplamalardır. Deneyip farkları görebilirsiniz. Dördüncü parametre bizi ilgilendirmemekte, 0.0 girilmelidir. matchShapes methodu bir match değeri döner. Bu değerler, objenin diğer objelere ne kadar benzediğinin değeridir. Değer küçüldükçe benzerlik oranı artar. Bir nevi fark da denilebilir.


Sonraki Yazı: Line and Circle Detection with Hough
Yorumlar

Henüz bir yorum bulunmuyor.
Yorum bırakın