我得到一个带有对象和旋转矩形的二进制图像,在cv2.findContours
和cv2.minAreaRect
中找到。图像被标准化为[0; 1] 在边界矩形内计算非零区域的最有效方法是什么?在区域旋转矩形中计算非零像素
1
A
回答
2
- 创建新的零值有原始图像的大小相同垫。
- 在(fillConvexPoly中使用RotatedRect顶点)在其上绘制旋转的矩形。
- Bitwise_and与你原来的面具
- 这个图像应用findnonzero功能结果图像
。您也可申请在图像的ROI前面的步骤,因为你有你的旋转矩形的边框。
2
据,私自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)
1
contours
是一个点的列表。您可以使用cv2.fillConvexPoly
在相同尺寸的空白二进制图像上填充此形状,然后使用cv2.countNonZero
或numpy.count_nonzero
来获取占用像素的数量。
相关问题
- 1. 计算旋转矩形的顶点
- 2. 旋转矩形时计算角度
- 3. Custon UISlider非矩形区域
- 4. 约计与旋转矩形
- 5. 计算旋转矩阵
- 6. 如何从.NET中的矩形源区域复制到非矩形/非并行区域目标区域?
- 7. 在lwuit中旋转非方形图像
- 8. 在Java中旋转矩形
- 9. 旋转矩形?
- 10. 从图像中提取一个矩形像素区域
- 11. 计算多边形区域
- 12. 识别图像中的矩形区域
- 13. 非矩形“可点击”区域
- 14. 计算数组矩形区域中的数值总和
- 15. 旋转的2D矩形的交叉点或区域
- 16. 如何计算像素区域的Windows区域(HRGN)?
- 17. 如何提取视频的矩形和非矩形区域?
- 18. 旋转矩形 - C#
- 19. 非活动区域设备旋转
- 20. CUDA中非矩形矩阵的计算机逆矩阵
- 21. 算法 - 打矩形的检测旋转矩形内
- 22. Java中多边形的计算区域
- 23. 从消失点计算旋转矩阵
- 24. 提取图像ROI与旋转矩形
- 25. 如何计算两个旋转矩形的重叠比例?
- 26. 围绕网格旋转矩形来计算玩家视图
- 27. 计算旋转的矩形/精灵的边/角
- 28. 矩形旋转和翻转
- 29. 如何在MATLAB中丢弃图像中的非矩形闭区域?
- 30. 如何计算WPF中从一个区域/矩形到另一个区域的矩阵变换?
如果您需要更高的性能,请调整drawContours代码来计算像素而不是绘图。 – Micka