使用自定义光度公式将图像转换为灰度

all*_*ist 10 opencv

我的图像包含灰色渐变和另一种颜色.我正在尝试使用opencv将图像转换为灰度,我也希望源图像中的彩色像素在输出灰度图像中变得相当轻,与颜色本身无关.

根据opencv docs,常见的光度公式为0.299R + 0.587G + 0.114B,因此它对不同的颜色给出了非常不同的亮度.

我认为解决方案是在光度公式中设置一些自定义权重.在opencv中有可能吗?或者可能有更好的方法来进行这种选择性去饱和作用?

我使用python,但没关系

Aur*_*ius 11

这是该transform()功能的完美案例.您可以将灰度转换视为对输入图像的每个像素应用1x3矩阵变换.该矩阵中的元素分别是蓝色,绿色和红色分量的系数,因为默认情况下OpenCV图像是BGR.

im = cv2.imread(image_path)
coefficients = [1,0,0] # Gives blue channel all the weight
# for standard gray conversion, coefficients = [0.114, 0.587, 0.299]
m = np.array(coefficients).reshape((1,3))
blue = cv2.transform(im, m)
Run Code Online (Sandbox Code Playgroud)