如何在Python中解决OpenCv中合并通道的问题?

问题描述 投票:0回答:1

我只是简单地导入了一个图像。我想把每个BGR频道用零数组合并,然后显示出来,我写了如下代码。

import cv2
import numpy as np
image = cv2.imread('./images/input.jpg')

B, G, R = cv2.split(image)

zeros = np.zeros((image.shape[:2]), dtype = 'int8')

cv2.imshow("Red", cv2.merge([zeros1, zeros1, R]))
cv2.imshow("Green", cv2.merge([zeros, G, zeros]))
cv2.imshow("Blue", cv2.merge([B, zeros, zeros]))

cv2.waitKey(500)
cv2.destroyAllWindows()

在运行这段代码后,我得到了以下错误。

error                                     Traceback (most recent call last)
<ipython-input-13-9252d63ed763> in <module>
      7 zeros = np.zeros((image.shape[:2]), dtype = 'int8')
      8 
----> 9 cv2.imshow("Red", cv2.merge([zeros1, zeros1, R]))
     10 cv2.imshow("Green", cv2.merge([zeros, G, zeros]))
     11 cv2.imshow("Blue", cv2.merge([B, zeros, zeros]))

error: OpenCV(4.1.1) C:\projects\opencv-python\opencv\modules\core\src\merge.dispatch.cpp:129: error: (-215:Assertion failed) mv[i].size == mv[0].size && mv[i].depth() == depth in function 'cv::merge'

我认为这似乎是正确的,问题出在哪里,我如何才能修复这个问题?

python image opencv merge channel
1个回答
0
投票

这里有一个错误。


zeros = np.zeros((image.shape[:2]), dtype = 'int8')

dtype应该与图片相同,所以......。uint8.

另外,我想你只是想显示图像,而你并不关心合并?

那你可以直接用一个通道从GRAY转换到BGR。

cv2.imshow("Red", cv2.cvtColor(R, cv2.COLOR_GRAY2BGR))
cv2.imshow("Green", cv2.cvtColor(G, cv2.COLOR_GRAY2BGR))
cv2.imshow("Blue", cv2.cvtColor(B, cv2.COLOR_GRAY2BGR))
© www.soinside.com 2019 - 2024. All rights reserved.