Ordered Contours and Approximation Contours

Kategori: Python / OpenCV , 08 Ekim 2019 , JanFranco


Contoursları sırası ile çizdirebiliriz. Örneğin objelerin alanlarına göre sırası ile çizdirelim:


import cv2
import numpy as np

image = cv2.imread('bunchofshapes.jpg')
orginal_image = image

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

for c in sorted_contours:
    cv2.drawContours(orginal_image, [c], -1, (255,0,0), 3)
    cv2.waitKey(0)
    cv2.imshow('Contours by area', orginal_image)

cv2.waitKey(0)
cv2.destroyAllWindows()
Çizilen her contour mantıklı olmayabilir. Burada %100 doğruluğa ulaşamasak bile bir yaklaşım yapmak mümkündür. Örnek görelim:


import numpy as np
import cv2

image = cv2.imread('house.jpg')
orig_image = image.copy()
cv2.imshow('Original Image', orig_image)
cv2.waitKey(0) 

gray = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)
edged = cv2.Canny(gray, 50, 100)

contours, hierarchy = cv2.findContours(edged, cv2.RETR_LIST, cv2.CHAIN_APPROX_NONE)

for c in contours:
    x,y,w,h = cv2.boundingRect(c)
    cv2.rectangle(orig_image,(x,y),(x+w,y+h),(0,0,255),2)    
    cv2.imshow('Bounding Rectangle', orig_image)

cv2.waitKey(0) 
    
for c in contours:
    accuracy = 0.01 * cv2.arcLength(c, True)
    approx = cv2.approxPolyDP(c, accuracy, True)
    cv2.drawContours(image, [approx], 0, (0, 255, 0), 2)
    cv2.imshow('Approx Poly DP', image)
    
cv2.waitKey(0)   
cv2.destroyAllWindows()
Burada accuracy değeri, yaklaşımın ne kadar doğru olmasını gerektiğini belirtir. Optimum değer 0.05 ile 0.01 arasındadır.


Sonraki Yazı: Matching Contours
Yorumlar

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