【发布时间】:2017-11-11 15:28:17
【问题描述】:
【问题讨论】:
-
如果您需要更高的性能,请调整 drawContours 代码以计算像素而不是绘图。
标签: python-3.x opencv computer-vision
【问题讨论】:
标签: python-3.x opencv computer-vision
您也可以在图像的 ROI 上应用前面的步骤,因为您有旋转矩形的边界框。
【讨论】:
根据 Humam Helfawi 的回答,我已经调整了一些建议的步骤,所以下面的代码似乎可以满足我的需要:
rectangles = [(cv2.minAreaRect(cnt)) for cnt in contours]
for rect in rectangles:
rect = cv2.boxPoints(rect)
rect = np.int0(rect)
coords = cv2.boundingRect(rect)
rect[:,0] = rect[:,0] - coords[0]
rect[:,1] = rect[:,1] - coords[1]
area = cv2.contourArea(rect)
zeros = np.zeros((coords[3], coords[2]), np.uint8)
cv2.fillConvexPoly(zeros, rect, 255)
im = greyscale[coords[1]:coords[1]+coords[3],
coords[0]:coords[0]+coords[2]]
print(np.sum(cv2.bitwise_and(zeros,im))/255)
【讨论】:
contours 是一个点列表。您可以使用cv2.fillConvexPoly 在相同大小的空二进制图像上填充此形状,然后使用cv2.countNonZero 或numpy.count_nonzero 获取占用的像素数。
【讨论】: