Python错误集锦:OpenCV图像用numpy方式进行转置后显示imshow()提示Invalid number of channels in input image:

原文链接:http://www.juzicode.com/archives/6431

 

错误提示:

OpenCV获取的图像用numpy方式进行转置后显示,imshow()提示Invalid number of channels in input image:

#VX公众号:桔子code / juzicode.com
import cv2
print('cv2.__version__:',cv2.__version__)

img = cv2.imread('lena.jpg')
ret_img  = img.T
print(ret_img.shape)
cv2.imshow('img',ret_img)
cv2.waitKey(0)
cv2.destroyAllWindows()
==========运行结果:
cv2.__version__: 4.5.2
(3, 512, 512)
---------------------------------------------------------------------------
error                                     Traceback (most recent call last)
<ipython-input-1-781dd5f3687d> in <module>
      6 ret_img  = img.T
      7 print(ret_img.shape)
----> 8 cv2.imshow('img',ret_img)
      9 cv2.waitKey(0)
     10 cv2.destroyAllWindows()

error: OpenCV(4.5.2) c:\users\runneradmin\appdata\local\temp\pip-req-build-kuwfz3h3\opencv\modules\imgproc\src\color.simd_helpers.hpp:92: error: (-2:Unspecified error) in function '__cdecl cv::impl::`anonymous-namespace'::CvtHelper<struct cv::impl::`anonymous namespace'::Set<3,4,-1>,struct cv::impl::A0x4f6b44ce::Set<3,4,-1>,struct cv::impl::A0x4f6b44ce::Set<0,2,5>,2>::CvtHelper(const class cv::_InputArray &,const class cv::_OutputArray &,int)'
> Invalid number of channels in input image:
>     'VScn::contains(scn)'
> where
>     'scn' is 512

 

错误原因:

1、imshow()所显示的图像通道号必须是1,3或4,上述例子中经过numpy数组的转置操作后,从shape属性的最后一个元素可以看到通道数变成了512,所以提示Invalid number of channels in input image

 

解决方法:

1、使用OpenCV内置的转置函数对图像进行转置,转置操作是单通道分别进行:

#VX公众号:桔子code / juzicode.com
import cv2
print('cv2.__version__:',cv2.__version__)

img = cv2.imread('lena.jpg')
ret_img = cv2.transpose(img)
print(ret_img.shape)
cv2.imshow('img',ret_img)
cv2.waitKey(0)
cv2.destroyAllWindows()
==========运行结果:
cv2.__version__: 4.5.2 
(512, 512, 3)

利用opencv的transpose()方法转置后,shape属性的最后一个仍然是3。

扩展内容:

  1. OpenCV-Python教程
  2. OpenCV-Python教程:几何空间变换~缩放、转置、翻转(resize,transpose,flip)

 


 

如果本文还没有完全解决你的疑惑,你也可以在微信公众号“桔子code”后台给我留言,欢迎一起探讨交流。

发表评论

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