我今天重新安装了opencv,然后运行我以前编写的代码 . 我收到了错误:
OpenCV的错误:断言失败(_contours.empty()||(_contours.channels()== 2 && contours.depth()== CV_32S))在findContours,文件/ tmp / OpenCV的-20170916-87764-1y5vj25 / OpenCV的-3.3.0 / modules / imgproc / src / contours.cpp,第1894行追溯(最近一次调用最后一次):文件“pokedex.py”,第12行,在(cnts,)= cv2.findContours(灰色,cv2 . RETR_TREE,cv2.CHAIN_APPROX_SIMPLE,(2,2))cv2.error:/tmp/opencv-20170916-87764-1y5vj25/opencv-3.3.0/modules/imgproc/src/contours.cpp:1894:错误:(-215 )_contours.empty()|| (_contours.channels()== 2 && _ contours.depth()== CV_32S)函数findContours
该代码适用于opencv2.4.13.3 .
代码:
image = cv2.imread("test.jpg")
gray = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY) // `len(gray.shape)` is 2.
(cnts, _) = cv2.findContours(gray, cv2.RETR_TREE, cv2.CHAIN_APPROX_SIMPLE, (2,2))
1 回答
什么是
(2,2)
?findContours()
的第四个位置参数是输出contours
数组 . 但是你没有将它传递给contours
数组的有效格式(这是一个点数组) . 如果它应该是offset
并且您不想提供额外的位置参数,则需要通过关键字offset=(2,2)
来调用它 . 这是实际错误的原因 . 我不确定为什么这在以前的版本中有效,因为它以相同的顺序接受相同的参数,而Python一直是这样的;如果参数是可选的,则需要为参数提供足够的位置参数,或者为其提供关键字 .findContours()
在OpenCV 3中返回三个值(在OpenCV 2中它只是两个值),contours
是第二个返回值;应该你也不必在python中包装
tuple
进行赋值,你可以只做x, y, z = fun()
,不需要做(x, y, z) = fun()
. 另外,你可以通过索引结果来询问第二个返回值所以这应该让你清楚:
These docs for OpenCV 3具有Python语法,因此如果您的其他任何先前代码中断,您可以浏览它,并查看语法是否已更改 .