python - 如何解决在 Python 中合并 OpenCv channel 的问题?

标签 python image opencv merge channel

我只是导入了一张图像。 我想将每个 BGR channel 与零数组合并,然后显示它们。 我的代码如下:

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'

我觉得这似乎是正确的。有什么问题以及如何解决这个问题?

最佳答案

错误如下:


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

dtype 应与图像相同,因此 uint8

顺便说一句,我认为您只想显示图像并且不关心合并?

然后您可以使用单个 channel 将 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))

关于python - 如何解决在 Python 中合并 OpenCv channel 的问题?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62167729/

相关文章:

python - 按值的绝对值对 Python 字典进行排序

php - 如何使用 FACEBOOK API 获取 facebook 中的所有组图像

opencv - 在 Mat opencv 中更改像素值

opencv - 您如何将对象检测器应用于给定视频的每一帧?

python - 来自 django-admin 的 Flask-admin 查询集模拟

python - 如何从 numba 结构类型创建结构?

python - 在 matplotlib 中将 "The Economist"样式保存为 mplstyle 中的默认样式

image - Phonegap 从画廊/相机中选择多个图像

css - 防止背景图像缩放

c++ - 尝试使用 C++ 中的 OpenCV 从灰度相机渲染图像。几帧后挂起