我尝试使用opencv的contourArea
计算图片中的不同区域,但没有成功。
我的目标是计算table的空闲区域(灰色)和占用区域(橙色对象),到目前为止,我已经使用以下代码打印出了轮廓:
img = cv2.imread('table.jpg', 1)
b,g,r = cv2.split(img)
imgRGB = cv2.merge([r,g,b])
hsv = cv2.cvtColor(img, cv2.COLOR_BGR2HSV)
hsv_channels = cv2.split(hsv)
rows = img.shape[0]
cols = img.shape[1]
for i in range(0, rows):
for j in range(0, cols):
h = hsv_channels[1][i][j]
if h > 90 and h < 120:
hsv_channels[2][i][j] = 255
else:
hsv_channels[2][i][j] = 0
image, contours, hierarchy = cv2.findContours(hsv_channels[2],cv2.RETR_LIST,cv2.CHAIN_APPROX_SIMPLE)
img1 = cv2.drawContours(imgRGB, contours, -1, (0,255,0), 3)
然而,我面临着两个问题:
1-代码检测圆内的轮廓。
2-给定多个轮廓,我不知道返回的面积是表的,对象的,还是两者都有。
有什么建议吗?
非常感谢。
1条答案
按热度按时间06odsfpq1#
自从你转换到HSV色彩空间,你有没有想过
cv2.inRange()
?之后,你可以找到cv2.findContours()
的轮廓,并把它们画出图像,只留下灰色区域。示例:
编辑
计算百分比:
输出量:
表百分比:9.875440996472028
餐巾百分比:58.93872849017208
第一个对象百分比:28.05565555475556
第二个对象百分比:3.1301749586003313
总计:100.0