Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/shell/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 包围图像所有黑色像素的最小角度矩形_Python_Python 3.x_Opencv - Fatal编程技术网

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

Python 包围图像所有黑色像素的最小角度矩形,python,python-3.x,opencv,Python,Python 3.x,Opencv,我需要得到包含图像所有黑色像素的最小角度矩形 目标图像是扫描的单色漫画/漫画页面,可以在任何位置(平移和旋转) 当连接所有黑色像素时,所需结果类似于以下代码段: _, mono = cv2.threshold(image, 127, 255, cv2.THRESH_BINARY) contours, _ = cv2.findContours(255-mono, cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_SIMPLE) rect = cv2.minAreaRect(c

我需要得到包含图像所有黑色像素的最小角度矩形

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

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

_, 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])

换句话说,我需要得到所有轮廓的并集的
minareact
,而不仅仅是其中一个


如何使用Python OpenCV实现此功能?

要使用找到的轮廓保持您的想法,您只需合并所有轮廓,例如使用。因为您只需要简单的坐标,所以合并它们应该很好。要获取旋转矩形的四个顶点,请使用。最后,绘图可以用

下面是一些简短的代码片段和一个简单的示例:

导入cv2
将numpy作为np导入
#一些测试图像
图像=255*np.ones((300300),np.uint8)
cv2.圆(图像,(100,60),30,0,1)
cv2.圆(图像,(200200),60,0,1)
#查找轮廓(相对于OpenCV版本);合并它们
cnts=cv2.findContours(255图像,cv2.RETR\u外部,cv2.CHAIN\u近似值\u无)
如果len(cnts)==2个其他cnts[1],则cnts=cnts[0]
碳纳米管=np.vstack(碳纳米管)
#计算合并轮廓的最小距离;确定点
pts=np.int32(cv2.boxPoints(cv2.minareact(cnts)))
cv2.多段线(图像,[pts],真,192)
cv2.imshow(“图像”,图像)
cv2.等待键(0)
cv2.destroyAllWindows()
这就是图像:

希望有帮助

----------------------------------------
系统信息
----------------------------------------
平台:Windows-10-10.0.16299-SP0
Python:3.8.1
NumPy:1.18.1
OpenCV:4.1.2
----------------------------------------

要使用找到的轮廓保留您的想法,您只需合并所有轮廓,例如使用。因为您只需要简单的坐标,所以合并它们应该很好。要获取旋转矩形的四个顶点,请使用。最后,绘图可以用

下面是一些简短的代码片段和一个简单的示例:

导入cv2
将numpy作为np导入
#一些测试图像
图像=255*np.ones((300300),np.uint8)
cv2.圆(图像,(100,60),30,0,1)
cv2.圆(图像,(200200),60,0,1)
#查找轮廓(相对于OpenCV版本);合并它们
cnts=cv2.findContours(255图像,cv2.RETR\u外部,cv2.CHAIN\u近似值\u无)
如果len(cnts)==2个其他cnts[1],则cnts=cnts[0]
碳纳米管=np.vstack(碳纳米管)
#计算合并轮廓的最小距离;确定点
pts=np.int32(cv2.boxPoints(cv2.minareact(cnts)))
cv2.多段线(图像,[pts],真,192)
cv2.imshow(“图像”,图像)
cv2.等待键(0)
cv2.destroyAllWindows()
这就是图像:

希望有帮助

----------------------------------------
系统信息
----------------------------------------
平台:Windows-10-10.0.16299-SP0
Python:3.8.1
NumPy:1.18.1
OpenCV:4.1.2
----------------------------------------

请展示您的图像示例!欢迎来到StackOverflow。请阅读“如何创建一个最小的、可复制的示例”()、“什么是好的主题”()和“我如何提出一个好的问题”()?请展示一个您的图像示例!欢迎来到StackOverflow。请阅读“如何创建一个最小的、可复制的示例”()、“什么是好的主题”()和“我该如何提出一个好的问题”()而不是
cv2.多段线
您也可以使用
cv2.绘制轮廓(图像,[pts],-1,(0,0,0),5)
如果您希望能够更改方框颜色和thickness@nathancy颜色和厚度也可以在
cv2.多段线
中设置-请参阅链接文档。您也可以使用
cv2.多段线
代替
cv2.绘制轮廓(图像,[pts],-1,(0,0,0),5)
如果您希望能够更改方框颜色和thickness@nathancy颜色和厚度也可以在
cv2.多段线中设置-请参阅链接文档。