答案 0 :(得分:2)
您可以在图像的ROI上应用前面的步骤,因为您有旋转矩形的边界框。
答案 1 :(得分:2)
根据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)
答案 2 :(得分:1)
contours
是一个积分列表。您可以使用cv2.fillConvexPoly
在相同大小的空二进制图像上填充此形状,然后使用cv2.countNonZero
或numpy.count_nonzero
来获取占用的像素数。