gpt4 book ai didi

python - 将cv2.minAreaRect()输出转换为轮廓,以输入到cv2.boundingRect()

转载 作者:行者123 更新时间:2023-12-02 17:49:13 25 4
gpt4 key购买 nike

我已经尝试了多种方法来围绕minAreaRect()创建boundingRect(),但是我一直遇到错误。我可以简单地使用原始轮廓,但是,这是要理解为什么与cv2.isContourConvex()和cv2.drawContours()一起使用的轮廓不能与cv2.boundingRect()一起使用的原因。基本上,我试图更好地理解轮廓的构造。

这是代码:

import cv2
import numpy as np

# EX1: draw contour from minAreaRect() output
mar = cv2.minAreaRect( contour )
pts = cv2.cv.BoxPoints( mar )
pts_contour = np.int0(pts)
cv2.drawContours(mask, [pts_contour], 0, 255, -1)

cv2.boundingRect( pts_contour ) # ERROR: see below

# EX2: test contour convex
contour = np.array([(378, 949), (375, 940), (368, 934),
(359, 932), (350, 937), (345, 955), (351, 962), (359, 966), (368, 964),
(376, 958) ], dtype=np.int)
print cv2.isContourConvex(contour)

cv2.boundingRect( contour ) # ERROR: see below

EX1:来自boundingRect()的错误:OpenCV错误:cvBoundingRect中不受支持的格式或格式组合(该功能不支持图像/矩阵格式)
Rotated Rectangles section here提供了转换为轮廓的示例

EX2:来自boundingRect()的错误:OpenCV错误:声明失败(boundsRect中的points.checkVector(2)> = 0 &&(points.depth()== CV_32F || points.depth()== CV_32S))
此示例从头开始创建轮廓 was provided here

同样,我可以实现自己的目标,因此我不希望有任何解决方法的建议,但我想更好地理解轮廓和错误本身背后的构造,因为我认为从选定的点创建boundingRect()很有用

另外,我不知道这是否重要,但是我注意到BoxPoints()和findContours()[0]的输出之间存在差异:
# BoxPoints:
[[1051 1367]
[ 968 1364]
[ 977 1072]
[1061 1074]]

# findCountours()[0]:
[[[ 992 1073]]
[[ 991 1074]]
[[ 989 1074]]
[[ 988 1073]]]

>>> cv2.__version__
'2.4.9'

cv2.boxPoints()对我不可用,所以我不确定这是否会给我带来不同的结果

最佳答案

EX2 中的一个细节在opencv错误消息中是显式的:它需要dtype float32或int32数组:(points.depth() == CV_32F || points.depth() == CV_32S)。 (已经用numpy v19进行了测试,如果我猜您因为我找不到int0而没有使用它)

至于EX1,很抱歉我无法用opencv 3.0.0-beta(cv2.cv消失了)重现它。顺便说一句,我建议不要花太多时间去思考库的这一部分:cv2.cv是legacy feature

关于python - 将cv2.minAreaRect()输出转换为轮廓,以输入到cv2.boundingRect(),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27028109/

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