【发布时间】:2019-01-14 22:22:28
【问题描述】:
使用 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):
这可能吗?
【问题讨论】:
-
这是因为大多数图像通常是 1、3 或 4 通道。我不知道有任何处理 2 通道图像的库。无论如何,在 python 中,您可以像
img_copy = img.copy(), img_copy[:,:,0] = 0一样轻松地将频道设置为0。 -
我知道设置等于 0 的事情,我已经在问题中提到了这一点。但是,如果我能够通过这个来执行它,我不能使用函数本身来执行它吗?真正的问题是我正在处理许多图像,我需要在每个图像中以两种或多种方式执行此操作。我不想为每个图像创建多个副本。所以希望我只能从一个对象获得输出。