为什么是cv2.COLOR_RGB2GRAY输入图像深度不支持失败?



我有一个从ML程序生成的掩码,它是(544,54,1)。RGB图像为(544,54,3)。我需要在蒙版中找到轮廓,并在RGB图像上绘制它们。我试图将蒙版转换为灰度,但由于格式问题,所有尝试都失败了。

resized_image -传入RGB图像
mask -从ML脚本生成的掩码

print(f"Resized rgb image shape : {resized_image.shape}, Mask image shape {mask.shape}")
tmp_mask = np.zeros(resized_image.shape, dtype=np.uint8)+255 
bump = tmp_mask * mask
print(bump.shape)
gray = cv2.cvtColor(bump, cv2.COLOR_RGB2GRAY)

输出如下:

Resized rgb image shape : (544, 544, 3), Mask image shape (544, 544, 1)
(544, 544, 3)
---------------------------------------------------------------------------
error                                     Traceback (most recent call last)
<ipython-input-33-07ef46f74c90> in <module>
12     bump = tmp_mask * mask
13     print(bump.shape)
---> 14     gray = cv2.cvtColor(bump, cv2.COLOR_RGB2GRAY)
15 
16     #gray_image = cv2.cvtColor(bump, cv2.COLOR_BGR2GRAY)
error: OpenCV(4.5.5) d:aopencv-pythonopencv-pythonopencvmodulesimgprocsrccolor.simd_helpers.hpp:94: error: (-2:Unspecified error) in function '__cdecl cv::impl::`anonymous-namespace'::CvtHelper<struct cv::impl::`anonymous namespace'::Set<3,4,-1>,struct cv::impl::A0x7123906f::Set<1,-1,-1>,struct cv::impl::A0x7123906f::Set<0,2,5>,2>::CvtHelper(const class cv::_InputArray &,const class cv::_OutputArray &,int)'
> Unsupported depth of input image:
>     'VDepth::contains(depth)'
> where
>     'depth' is 4 (CV_32S)

我怎么能解决格式问题(输入图像的不支持深度)在这里?有没有其他更简单的方法来找到蒙版图像中的轮廓?

复制

cv2.cvtColor(np.ones((30,30,3), dtype=np.int32), cv2.COLOR_RGB2GRAY)

depth不是通道(数组形状的一部分),它是每个数字的字节数。Int32将使用4*8位来表示整数,而uint8只使用1*8位。

cvtColor需要np.float32np.uint8作为dtype

我们可以猜出tmp_mask.dtype==np.uint8

因此,请通过print(mask.dtype)

检查mask变量的dtype

最新更新