如何使OpenCv结合两个颜色通道显示图像?

时间:2019-01-09 19:36:57

标签: python image opencv

使用OpenCV从图像中获取一个颜色通道的输出并不难,并且很容易做到。

但是从图像的三种主要BGR颜色中,我是否想直接使用功能以绿色和红色而不是蓝色的组合形式查看图像?

因此,我可以通过将所有“蓝色”值都设置为0来执行上述操作,然后查看图像,其代码如下:

    import cv2
    import numpy as np

    gr = cv2.imread('imagetowork2.jpg')
    gr[:, :, 0] = 0

    cv2.namedWindow("random_image",cv2.WINDOW_NORMAL)
    cv2.resizeWindow("random_image",590,332)
    cv2.imshow("random_image",gr)
    cv2.waitKey(0)
    cv2.destroyAllWindows()

我不得不求助于上面的这段代码,因为使用此gr[:, :, 1:3]无效。而且我不明白为什么cv2函数可以使用整个3维值而不使用二维维?

如果他们尝试使用gr[:, :, 1:3]来显示图片,这是一个错误,

error: OpenCV(3.4.5) C:\projects\opencv-python\opencv\modules\imgcodecs\src\utils.cpp:622: error: (-15:Bad number of channels) Source image must have 1, 3 or 4 channels in function 'cvConvertImage'

所以我直接的主要问题是,是否有内置函数直接在OpenCV或任何其他库中执行此操作,或者将整个颜色值设置为0是执行此操作的唯一方法?

这是我正在处理的图像(实际上可以使用任何类型的图像): enter image description here

这是我执行的结果的输出(我想使用一些内置函数而不将某些值设置为0): enter image description here

这有可能吗?

1 个答案:

答案 0 :(得分:1)

我想您可以做的一件事是分别保持频道并合并您要查看的内容:

#!/usr/local/bin/python3

import numpy as np
import cv2

im    = cv2.imread('sd71Z.jpg')
b,g,r = cv2.split(im)
zeros = np.zeros_like(b)

cv2.imshow("Zero blue",  cv2.merge([zeros,g,r]))
cv2.imshow("Zero green", cv2.merge([b,zeros,r]))
cv2.imshow('Zero red',   cv2.merge([b,g,zeros]))
cv2.waitKey()

enter image description here