OpenCV - 灰色图像颜色不起作用

时间:2017-03-08 16:23:33

标签: python opencv image-processing

我正在尝试这段代码:

img = cv2.imread(os.path.join(RUTA_IMAGEN, 'probetas2small.jpg'),0)
cv2.imwrite(os.path.join(RUTA_IMAGEN, 'processed1.jpg'), img);
cimg = cv2.cvtColor(img,cv2.COLOR_GRAY2BGR)
cv2.imwrite(os.path.join(RUTA_IMAGEN, 'processed2.jpg'), cimg);

初始图片' probetas2small.jpg'是有颜色的。 Image' processed1.jpg'是灰色的&'39; processed2.jpg'太...

如何将初始处理的图像再次转换为颜色?

(对不起我的英文)

2 个答案:

答案 0 :(得分:2)

你不能。当你从颜色转换为灰色时,丢失信息,因此无法进行相反的操作。

将颜色转换为灰色(这是你在第一行中通过使用末尾标记为零的imread进行的操作)如下所示:对于{{g,r]中的每个像素{{ 1}},其值只有一个数,等于0.299 * r + 0.587 * g + 0.114 * b。你失去了b,g和r的各个值 因此,转换回(视觉上)彩色图像(您尝试做img)是不可能的。这就好像我给你一个数字(比如说43)并且问你“为了得到43而我计算了哪3个数字?”。你无法回答这个问题,cv2.cvtColor()也不能回答。这个函数的作用只是产生一个3通道图像,但是每个通道具有相同的值,给出结构彩色图像,但是可视灰度图像。

(感谢Dan在评论中提供正确的公式RGB> Gray)

答案 1 :(得分:0)

问题在于,当您将probetas2small.jpg加载到img时,您已将其转换为灰色。而不是

img = cv2.imread(os.path.join(RUTA_IMAGEN, 'probetas2small.jpg'),0)

其中0表示"读为灰色",您应该

img = cv2.imread(os.path.join(RUTA_IMAGEN, 'probetas2small.jpg'))