我正在尝试使用cv2.findContours在二进制图像中检测特定类型的形状(三角形,正方形,圆形),并使用不同颜色为每种类型着色 . 以下代码适用于大型形状,但它不适用于小型形状 - 大约10 * 10像素 .
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.01*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) > 15:
print "circle"
cv2.drawContours(img,[cnt],0,(220,152,91),-1)
cv2.imshow('img',img)
cv2.waitKey(0)
cv2.destroyAllWindows()
我使用的图像:before
结果:after
如果你能帮我解决这个问题,我将非常感激!
1 回答
"The second argument in cv2.approxPolyDP is called epsilon, which is maximum distance from contour to approximated contour. It is an accuracy parameter. A wise selection of epsilon is needed to get the correct output."
输出相同的代码,但有以下变化 -