python下cv2.imread()返回NoneType错误的解决
opencv功能强大,并提供C++、Python等各种接口而易于使用。
在Python下用
img=cv2.imread()
函数读取图像时,总是返回为None,造成后面的处理
img.shape
总是返回为NoneType错误。
系统为Ubuntu14.03,查看已安装有opencv2.4,网上查了下,有说是因为opencv的bug,建议用
cv2.cv.LoadImage()
代替使用,使用这个函数代替后,总是返回ioerror,再查似乎并没有他人遇到过ioerror问题。
既然这种方法行不通,那就可以考虑下面替代方法:
Alt 1:由于后面的img处理时是ndarray格式,那可以考虑先用matlab将图片读取后存储为mat格式,在python中直接读取mat数据,略过直接读取图片的imread操作。这种方法规避了上述错误,验证可行。
然后,偶尔查看pip list时,发现并没有opencv-python,忽然想到,可能是因为底层虽然安装了opencv,但并没有安装python接口,而python自带的cv2 api仅包含了函数列表,没有进一步与opencv的交互,这样imread时就可能不报错,但实际没有读取数据,造成返回为NoneType。
Final solution
:执行
pip install --upgrade opencv-python
,成功后重新打开python console验证,imread jpg通过,返回的img为正常的M*N*3数据;至此解决此错误。