-1
我正在研究一個程序,我應該檢測形狀 - 圓形,正方形和traingles - 並用不同的顏色爲每種類型着色。openCV:無法正確檢測形狀使用findContours
我使用cv2.findCountours,然後cv2.approxPolyDP來檢測每個形狀。
這是我的代碼:
import numpy as np
import cv2
img = cv2.imread('1.jpg')
gray = cv2.imread('1.jpg',0)
ret,thresh = cv2.threshold(gray,127,255,1)
contours,h = cv2.findContours(thresh,cv2.RETR_CCOMP,cv2.CHAIN_APPROX_NONE)
for cnt in contours:
approx = cv2.approxPolyDP(cnt, 0.03 * cv2.arcLength(cnt, True), True)
print len(approx)
if len(approx)==3:
print "triangle"
cv2.drawContours(img,[cnt],0,(122,212,78),-1)
elif len(approx)==4:
print "square"
cv2.drawContours(img,[cnt],0,(94,234,255),-1)
elif len(approx) == 8:
k = cv2.isContourConvex(approx)
if k:
cv2.drawContours(img, [cnt], 0, (220, 152, 91), -1)
cv2.imshow('img',img)
cv2.waitKey(0)
cv2.destroyAllWindows()
它檢測到我所提到的形狀,但它檢測以及形狀,這是不是圓/三角形/平方米,並提出他們,因爲他們是。
這是我所使用的圖像:1
輸出:2
任何建議如何解決這個問題呢? 我可以添加哪些考試?
謝謝!