我正在尝试这段代码:
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'太...
如何将初始处理的图像再次转换为颜色?
(对不起我的英文)
答案 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'))