import cv2 as cv
src = cv.imread("F:/datacod/opencv_learn/imgs/0004.jpg")
# cv.namedWindow("test", cv.WINDOW_AUTOSIZE)
# cv.imshow("test", src)
face = src[430:820, 520:860]
gray = cv.cvtColor(face, cv.COLOR_RGB2GRAY)
backgray = cv.cvtColor(gray, cv.COLOR_GRAY2RGB)
src[430:820, 520:860] = backgray
cv.imshow("face", src)
cv.waitKey(0)
cv.destroyAllWindows()
src:
face(ROI):
gray:
将gray转为RGB图像,然后将这部分ROI重新放回src中,应为彩色,但结果显示:
如果直接将gray放回src中,则报错:
通道数不同,不能将灰度图像直接放回原图像中,须转换为RGB图像,可是为什么ROI区域仍为灰色?
COLOR_RGB2GRAY是把三通道RGB对象转换为单通道灰度对象!!!而只有因为只有三通道的backface才可以赋给三通道的src。
其实R,G,B三个通道上的值相等时,所呈现的颜色就是灰色(很容易验证),只有亮跟暗的区别,值越大就越亮,越小就越暗。也就是从灰度图中的亮度变成了彩色图中的灰色了。所以使用这个函数将灰度图转换成彩色图时,如果出现的还是黑白图,不要觉得是程序出错了。