【发布时间】:2019-01-29 01:49:50
【问题描述】:
我有一个小项目,我需要计算头发部分的面积,并判断哪一个覆盖了两个图像中更大的区域。我有另一个用于毛发提取的代码。然而,它并没有像预期的那样给出结果。您可能已经从下图中猜到了。我稍后会处理它。
我正在尝试从轮廓计算面积,这给了我这样的错误:
OpenCV(3.4.4) C:\projects\opencv-python\opencv\modules\imgproc\src\contours.cpp:195: error: (-210:Unsupported format or combination of formats) [Start]FindContours supports only CV_8UC1 images when mode != CV_RETR_FLOODFILL otherwise supports CV_32SC1 images only in function 'cvStartFindContours_Impl'
那么,为什么findContours 不支持我的图片?
另一种方法:
我只需要找到头发部分的区域。所以,我想计算所有白色像素覆盖的区域,然后从整个图像的区域中减去它。在这种情况下,我不知道如何计算所有白色像素覆盖的区域。我是这么想的,因为头发颜色可以变化,但背景总是白色的。
那么,这种技术可行吗?或者请针对上述错误提出一些解决方案?
我的形象:
我的代码:
import cv2
import numpy as np
img = cv2.imread("Hair.jpg")
_, contours, _ = cv2.findContours(img, cv2.RETR_TREE, cv2.CHAIN_APPROX_NONE)
c = max(contours, key = cv2.contourArea)
cv2.drawContours(img, [c], -1, (255,255, 255), -1)
area = cv2.contourArea(c)
print(area)
cv2.imshow("contour", img)
cv2.waitKey(0)
cv2.destroyAllWindows()
【问题讨论】:
标签: python opencv image-processing