作者:醉雨轩Y
来源:CSDN
原文:https://blog.csdn.net/miao0967020148/article/details/88623631
试图跑项目时,总是报错:
刚开始以为是pycharm环境没搭好或是第三方库版本太低,在尝试过许多次卸载重装和更换解释器后,终于百度到了答案。原来是opencv版本更新后函数的返回值个数有变。
OpenCV旧版,4.0以下的版本,返回三个参数:
im2, contours, hierarchy = cv2.findContours(mask, cv2.RETR_TREE, cv2.CHAIN_APPROX_SIMPLE)
而OpenCV 新版,4.0及其以上的版本,返回两个参数:
contours, hierarchy = cv2.findContours(mask, cv2.RETR_TREE, cv2.CHAIN_APPROX_SIMPLE)
解决办法:
1.(未验证)要想返回三个参数,把OpenCV 降级成3.4.3.18 就可以了,在终端输入
pip install opencv-python==3.4.3.18
但是我使用pycharm在安装3.4版本时均失败。这个办法并没有得到验证
2.因为新版本的findContours函数并不会修改源图片,只返回contours和hierarchy即可。
故不用给im2
赋值,代码写成如下即可。
contours, hierarchy = cv2.findContours(mask, cv2.RETR_TREE, cv2.CHAIN_APPROX_SIMPLE)
附录:
我们在使用import cv2
时,引入的是OpenCV3,而不是望文生义的OpenCV2。
为什么OpenCV3在Python中包名称是cv2,而不是cv3?
实际上,”cv2”中的”2”并不表示OpenCV的版本号。我们知道,OpenCV是基于C/C++的,”cv”和”cv2”表示的是底层C API和C++API的区别,”cv2”表示使用的是C++API。这主要是一个历史遗留问题,是为了保持向后兼容性。