Python错误集锦:OpenCV-Python做通道分离时提示ValueError: too many values to unpack (expected 3)

原文链接: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)

 

扩展内容:

  1.  Opencv-Python教程

 


 

如果本文还没有完全解决你的疑惑,你也可以在微信公众号“桔子code”后台留言撩我,我会尽我所能为你答疑解惑。

发表评论

您的电子邮箱地址不会被公开。 必填项已用*标注