我的问题可能只是一个Python 3 OpenCV错误,但我不知道。我在Windows 10中安装了32位Python版本3.4.3。我从这个网站安装了OpenCV 3.0.0 32位http://www.lfd.uci.edu/~gohlke/pythonlibs/(opencv_python-3.0.0-cp34-none-win32.whl)。
我也从该网站安装了numpy 1.10.0b1测试版。
我已经使用OpenCV和Java测试了下面相同的基本程序流程并且它可以工作。出于这个原因,我认为这可能只是一个Python bug问题。会发生以下代码中对drawContours的调用会产生此错误:
OpenCV错误:图像步骤错误(步骤必须是esz1的倍数)在cv :: setSize,file ...... \ opencv-3.0.0 \ modules \ core \ src \ matrix.cpp,line 300
我使用的测试图像是1168 x 1400像素。
以下是代码:
import cv2
import numpy as np
img = cv2.imread('test.jpg')
imgray = cv2.cvtColor(img,cv2.COLOR_BGR2GRAY)
ret, threshImg = cv2.threshold(imgray,127, 255,cv2.THRESH_BINARY)
can = cv2.Canny(threshImg,100,200)
contImg, contours, hierarchy = cv2.findContours(can,cv2.RETR_LIST,cv2.CHAIN_APPROX_SIMPLE)
cv2.drawContours(img, contours,-1,(0,255,0))
cv2.imwrite('test write.jpg', img)
******* ******** EDIT **我刚刚通过安装numpy版本1.9.2而不是1.10 beta来解决问题。****
答案 0 :(得分:2)
这与使用轻松步幅的NumPy的开发和beta版本有关。这样做是为了强制检测第三方库中的细微错误,这些错误会对数组的步幅做出不必要的假设。
由于此问题已被检测到,并且现在已在OpenCV的开发版本中修复,请参阅the relevant PR,但它可能需要一些时间才能使其进入正确的OpenCV版本。
无论修复如何,只要NumPy 1.10的最终版本发布,你就应该能够安全地切换到它,即使是当前的错误版OpenCV版本,因为松弛的步幅将被停用。
答案 1 :(得分:1)
我通过安装numpy 1.9.2而不是新的1.10测试版来解决了这个问题。