gpt4 book ai didi

python - 包围图像所有黑色像素的最小角度矩形

转载 作者:行者123 更新时间:2023-11-30 21:52:18 24 4
gpt4 key购买 nike

我需要获得包围图像的所有黑色像素的最小角度矩形。

目标图像是扫描的单色漫画/漫画页面,可以处于任何位置(平移和旋转)。

当所有黑色像素都连接时,所需的结果类似于以下代码片段:

_, mono = cv2.threshold(image, 127, 255, cv2.THRESH_BINARY)
contours, _ = cv2.findContours(255-mono, cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_SIMPLE)
rect = cv2.minAreaRect(contours[0])

换句话说,我需要获取所有轮廓的并集的 minAreaRect,而不仅仅是其中之一。

如何使用 Python OpenCV 来做到这一点?

最佳答案

使用 cv2.findContours 找到的轮廓来保留您的想法,你只需要合并所有轮廓,例如使用np.vstack 。因为您只需要 cv2.minAreaRect 的简单坐标,合并它们应该没问题。要获取旋转矩形的四个顶点,请使用 cv2.boxPoints 。最后,可以用 cv2.polylines 来完成绘图。 .

这里有一些简短的代码片段和一个最小的示例:

import cv2
import numpy as np

# Some test image
image = 255 * np.ones((300, 300), np.uint8)
cv2.circle(image, (100, 60), 30, 0, 1)
cv2.circle(image, (200, 200), 60, 0, 1)

# Find contours (with respect to OpenCV version); merge them
cnts = cv2.findContours(255-image, cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_NONE)
cnts = cnts[0] if len(cnts) == 2 else cnts[1]
cnts = np.vstack(cnts)

# Calculate minAreaRect of merged contours; determine points
pts = np.int32(cv2.boxPoints(cv2.minAreaRect(cnts)))
cv2.polylines(image, [pts], True, 192)

cv2.imshow('image', image)
cv2.waitKey(0)
cv2.destroyAllWindows()

这就是图像:

Output

希望有帮助!

----------------------------------------
System information
----------------------------------------
Platform: Windows-10-10.0.16299-SP0
Python: 3.8.1
NumPy: 1.18.1
OpenCV: 4.1.2
----------------------------------------

关于python - 包围图像所有黑色像素的最小角度矩形,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59923016/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com