Python 错误:(-215)计数>;=0&&;函数arcLength中的(深度==CV_32F | |深度==CV_32S)
我正在使用python 2.7 当我尝试对它运行epsilon操作时,我得到了这个错误, 这是我的密码Python 错误:(-215)计数>;=0&&;函数arcLength中的(深度==CV_32F | |深度==CV_32S),python,opencv,Python,Opencv,我正在使用python 2.7 当我尝试对它运行epsilon操作时,我得到了这个错误, 这是我的密码 import cv2 import numpy as np img = cv2.imread('img.jpeg') img = cv2.convertScaleAbs(img) epsilon = 0.01 * cv2.arcLength(img, True) approx = cv2.approxPolyDP(img, epsilon, True) hull = cv2.convexH
import cv2
import numpy as np
img = cv2.imread('img.jpeg')
img = cv2.convertScaleAbs(img)
epsilon = 0.01 * cv2.arcLength(img, True)
approx = cv2.approxPolyDP(img, epsilon, True)
hull = cv2.convexHull(img)
这是一个错误
Traceback (most recent call last):
File "/home/decentmakeover2/lanedetect.py", line 6, in <module>
epsilon = 0.01 * cv2.arcLength(img, True)
error: /home/decentmakeover2/opencv-
3.2.0/modules/imgproc/src/shapedescr.cpp:285: error: (-215) count >= 0 &&
(depth == CV_32F || depth == CV_32S) in function arcLength
回溯(最近一次呼叫最后一次):
文件“/home/decentmakeover2/lanedetect.py”,第6行,在
ε=0.01*cv2.弧长(img,真)
错误:/home/decentmakeover2/opencv-
3.2.0/modules/imgproc/src/shapedscr.cpp:285:错误:(-215)计数>=0&&
函数arcLength中的(深度==CV_32F | |深度==CV_32S)
我不知道该怎么改变,有什么想法吗
编辑:
回溯(最近一次呼叫最后一次):
文件“/home/decentmakeover2/lanedetect.py”,第8行,在
ε=0.01*cv2.弧长(img,真)
类型错误:不支持曲线数据类型=6
>>>
(以及approxPolyDP
和convxhull
)需要作为输入
二维点的输入向量
而不是图像
所有这些函数都适用于点,计算图像的弧长(或多边形近似,或凸包)是没有意义的。我在尝试生成2D点组的凸包时也遇到了这个错误。 错误消息如下所示: cv2.error:OpenCV(4.2.0)C:\projects\OpenCV python\OpenCV\modules\imgproc\src\convhull.cpp:137:error:(-215:断言失败)函数“CV::convxhull”中的total>=0&(depth==cv32f | | depth==cv32s)
原因是我的输入点是浮点数而不是整数。因此,我使用numpy.astype(np.int)来更改输入点的数据类型。Python布尔or运算符是
或,而不是|
。但是我的代码中没有或,我是不是误用了什么?这里的错误是说计数=0
,这意味着检查向量(2)
在Mat上失败,或者数据类型不是32位浮点或int,这意味着它不是正确的位深度。您可以在此处检查源代码:。jpeg的颜色深度是多少?您需要将其转换为32位浮点/int,以便arclength
能够happy@DanielRoseman该错误是从openCV在c++
代码中抛出的,因此与op的问题无关。这里的问题是数组的形状和/或类型不正确。您必须将arcLength与点数组而不是图像一起使用。如何计算图像的弧长?
Traceback (most recent call last):
File "/home/decentmakeover2/lanedetect.py", line 8, in <module>
epsilon = 0.01 * cv2.arcLength(img,True)
TypeError: curve data type = 6 is not supported
>>>