原文链接:http://www.juzicode.com/archives/5715
错误提示:
opencv做通道分离时提示ValueError: too many values to unpack (expected 3)
#VX公众号:桔子code / juzicode.com
import cv2
print('cv2.__version__:',cv2.__version__)
img = cv2.imread('opencv-logo.png',cv2.IMREAD_UNCHANGED)
b,g,r = cv2.split(img)
==========运行结果:
---------------------------------------------------------------------------
ValueError Traceback (most recent call last)
<ipython-input-2-b2181f575a21> in <module>
3 print('cv2.__version__:',cv2.__version__)
4 img = cv2.imread('opencv-logo.png',cv2.IMREAD_UNCHANGED)
----> 5 b,g,r = cv2.split(img)
ValueError: too many values to unpack (expected 3)
错误原因:
1、图片为4通道彩色图片,所以在用split()分离图像时,返回的4个图像实例,而只使用了b,g,r 3个参数接收返回对象,所以报错。
解决方法:
1、在获取图像后需要用len(img.shape)==3检查图像是否为彩色图像,如果为彩色图像在判断通道数img.shape[2]是3或者4做分支处理:
#VX公众号:桔子code / juzicode.com
import cv2
print('cv2.__version__:',cv2.__version__)
img = cv2.imread('opencv-logo.png',cv2.IMREAD_UNCHANGED)
#img = cv2.imread('lena.jpg',cv2.IMREAD_UNCHANGED)
print(img.shape)
if len(img.shape)==3 and img.shape[2]==4:
b,g,r,a = cv2.split(img)
elif len(img.shape)==3 and img.shape[2]==3:
b,g,r = cv2.split(img)
==========运行结果:
cv2.__version__: 4.5.2
(739, 600, 4)
或:
cv2.__version__: 4.5.2
(512, 512, 3)
扩展内容:
如果本文还没有完全解决你的疑惑,你也可以在微信公众号“桔子code”后台给我留言,欢迎一起探讨交流。