【发布时间】:2019-04-16 04:49:41
【问题描述】:
img_name='6.jpg'
image = cv2.imread(img_name)
image_copy_new=cv2.imread(img_name)
gray = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)
retval, thresholded = cv2.threshold(gray, 30, 255, cv2.THRESH_BINARY_INV)
plt.imshow(thresholded,cmap="gray")
这会产生这样的输出 -
然后我搜索图像中的轮廓,并试图通过这段代码只找到图像中最圆的那个
contours, hierarchy = cv2.findContours(thresholded, cv2.RETR_TREE, cv2.CHAIN_APPROX_SIMPLE)
image_copy = np.zeros_like(image) # create a new emtpy image
for cnt in contours:
peri = cv2.arcLength(cnt, True)
approx = cv2.approxPolyDP(cnt, 0.04 * peri, True)
(x, y, w, h) = cv2.boundingRect(cnt)
ar = w / float(h)
if w*h > 20 and 0.9 < ar < 1.1: # filtering condition
cv2.drawContours(image, [cnt], 0, 255, -1)
虽然这在某些情况下会产生很好的效果,但在其他情况下(例如这个),它会完全失败。我尝试了许多其他的方法,例如 “霍夫变换,不同的变形”,但我无法解决这个问题。 这些图像只有眼睛,不是整张脸,否则 dlibs 人脸检测会起作用 此代码有效的情况是
感谢您抽出时间帮助我。
【问题讨论】:
标签: python-3.x opencv