繁体   English   中英

如何让 OpenCv 显示两个颜色通道组合的图像?

[英]How to make OpenCv show an image in combination of two color channels?

使用 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 是唯一的方法?

所以这是我正在处理的图像(实际上可以使用任何类型的图像): 在此处输入图片说明

这是我执行的输出(我想使用一些内置函数而不是将某些值设置为 0): 在此处输入图片说明

这是可能吗?

我想您可以做的一件事是单独保留频道并组合您想要查看的内容:

#!/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()

在此处输入图片说明

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM