Đây là một cách tiếp cận đơn giản trong mã Python. (But as I stated in my comment below, It is not an universal answer applicable everywhere, It is just to show finding contour inside a contour can be done. And if your images are different, then you have to come with some different constraints other than i mentioned below
)
Những gì bạn đang làm sau khi tìm Contours là, bạn kiểm tra xem khu vực của mỗi đường bao nhỏ hơn giá trị đã chỉ định (tôi đã cho 10000, chỉ đoán), nếu không phải là đường viền lớn hơn, hãy tránh nó. Nếu ít hơn giá trị được chỉ định, nó có thể là hình vuông hoặc hình chữ nhật bên cạnh nó.
Vì vậy, chúng tôi tìm chiều rộng và chiều cao của nó và kiểm tra xem tỷ lệ co gần bằng 1. nếu có, đó là hình vuông của chúng tôi.
import cv2
import numpy as np
img = cv2.imread('sofcnt.jpg')
gray = cv2.imread('sofcnt.jpg',0)
ret,thresh = cv2.threshold(gray,127,255,1)
cont,hier = cv2.findContours(thresh,cv2.RETR_LIST,cv2.CHAIN_APPROX_SIMPLE)
for cnt in cont:
approx = cv2.approxPolyDP(cnt,0.02*cv2.arcLength(cnt,True),True)
if cv2.contourArea(cnt) < 10000:
x,y,w,h = cv2.boundingRect(cnt)
if w/float(h) < 2:
cv2.drawContours(img,[cnt],0,255,-1)
cv2.imshow('a',img)
cv2.waitKey(0)
cv2.destroyAllWindows()
Kết quả:
Nguồn
2012-07-12 14:40:49
bạn có thể cung cấp thêm thông tin? Tiêu chuẩn phát hiện đường viền đầy là gì? – ArtemStorozhuk