【问题标题】:Create contour from scratch in python OpenCV (cv2)在 python OpenCV (cv2) 中从头开始创建轮廓
【发布时间】:2014-01-05 01:26:32
【问题描述】:

我正在尝试使用 opencv python 接口 cv2 来确定多边形是否是凸的。从我在网上找到的所有内容来看,输入轮廓必须是每个点的 float32 元组的 numpy 数组。所以我假设它是这样工作的:

import cv2, numpy
contour = numpy.array( [ 
(378, 949), (375, 940), (368, 934), 
(359, 932), (350, 937), (345, 955), 
(351, 962), (359, 966), (368, 964), 
(376, 958) ], numpy.float32 )
cv2.isContourConvex(contour)

但我收到此错误:

OpenCV Error: Unsupported format or combination of formats (The matrix can not be converted to point sequence because of inappropriate element type) in cvPointSeqFromMat, file /tmp/buildd/opencv-2.3.1/modules/imgproc/src/utils.cpp, line 59

谁能告诉我合适的元素类型以及如何从头开始创建轮廓?

【问题讨论】:

  • 猜测:你可能想将 dtype 从 float 更改为 int

标签: python opencv numpy


【解决方案1】:

OpenCV 期望图像的点是整数元组,只需将它们的类型更改为 int:

>>> import cv2
>>> import numpy as np
>>> 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)
>>> cv2.isContourConvex(contour)
 True

【讨论】:

  • 我之前已经尝试过了,但是会导致这个错误:断言失败 (contour.checkVector(2) >= 0 && (contour.depth() == CV_32F || contour.depth() == CV_32S)) 在 isContourConvex,文件 /tmp/buildd/opencv-2.3.1/modules/imgproc/src/contours.cpp,第 1737 行
【解决方案2】:

在 debian 测试中安装 openCV 时出现问题。从源代码安装 openCV 2.4.8 后,它可以工作。 感谢您的帮助!

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-12-19
    • 1970-01-01
    • 2020-06-14
    • 2016-09-25
    • 2017-05-25
    • 2020-06-24
    相关资源
    最近更新 更多