我正在开发一种缺陷分析系统,可以在缺陷水果的区域中找到它。我正处于其发展的初期。我正在使用opencv和python。
我使用以下代码查找轮廓:
im = cv2.imread('Mango_49_A.jpg')
imgray = cv2.cvtColor(im, cv2.COLOR_BGR2GRAY)
ret, thresh = cv2.threshold(imgray, 127, 255, 0)
im2, contours, hierarchy = cv2.findContours(thresh, cv2.RETR_TREE, cv2.CHAIN_APPROX_SIMPLE)
cv2.drawContours(im, contours, -1, (0,255,0), 3)
要查找区域,我使用以下代码:
if len(contours) != 0:
for (i, c) in enumerate(contours):
area = cv2.contourArea(c)
if area < area_of_the_mango1:
print(area)
area_of_the_defected_region1 += area
cv2.drawContours(img, c, -1, (255,255,0), 12)
我只想在芒果内部计算轮廓。我得到的结果计算出以下轮廓区域: 1.完整的图像边界 2.芒果 3.芒果中的缺陷
由于计算了上述三个区域的面积,因此缺陷区域的面积大于芒果的面积。
帮我计算一下芒果内部的轮廓区域。
答案 0 :(得分:0)
您将外部边框和一些微小的轮廓作为背景的一部分的事实表明,阈值并不是理想的将前景与背景分开的事实。
对于此行:
ret, thresh = cv2.threshold(imgray, 127, 255, 0)
使用值127
进行播放,因此您不再看到前景对象的外边缘和背景之间的轮廓
此外,您可以使用morphological filters(例如腐蚀)稍微清理阈值
当前如何检索轮廓的主要问题是:cv2.RETR_TREE
。
根据{{3}},您只能获取要获取的外部轮廓:
im2, contours, hierarchy = cv2.findContours(thresh, cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_SIMPLE)
下一步,您可以查看已经使用的contourArea
之类的findContours
documentation,还包括轮廓逼近和凸包。