这里有几件事需要理解。
弗斯特
Source article. Highly recommend reading it
数码照片由像素组成,像素是彩色点,
图像中最小的元素。
颜色。
大胆强调我的。
第二
,
存在多种颜色编码方式。其中最突出的是
RGB公司。我们到了:RGB。代表:红色。G的意思是:绿色。B是指:
成份:红、绿、蓝。信不信由你,
所有颜色
那个
人类可以看到
蓝色。
第三
,在RGB中,数字表示该颜色/通道的“数量”
成分
. 0意味着:没有,255意味着:最大的数量。
第四
第一个观察:在颜色编码的RGB方式中,越高的
数字,对应的颜色越浅。
第二个观察:
中性色:白色、灰色或黑色。
这部分真的很重要。因为R、G和B值只代表组件,所以必须根据每个组件的“多少”来合并它们。如果它们以相同的数量出现,它们都会产生从黑到白(通常称为灰度)的阴影。黑度/白度取决于每个频道的实际数量,0表示黑色,255表示白色,其他介于两者之间。理解这一点很重要,这意味着图像仍然可以有3r、G、B分量,但是对于灰度级的像素,它们都被设置为相同的值。
现在,深入到它的编码方面,重要的是要意识到,数字就是纯数字。
import cv2
color = cv2.imread("lohri.jpg")
b,g,r = cv2.split(color)
这里,b,g和r是
,它们只是存储数字的矩阵,每个像素一个。我可以为他们写下不同的名字,如下所示:
import cv2
color = cv2.imread("lohri.jpg")
apple,mango,orange = cv2.split(color) #perfectly valid, although confusing
swap = cv2.imwrite("swap.jpg", cv2.merge((b,b,b)))
swap = cv2.imwrite("swap.jpg", cv2.merge((some_random_matrix,some_random_matrix,some_random_matrix)))
或者像这样,
swap = cv2.imwrite("swap.jpg", cv2.merge((apple,apple,apple)))
b
有
就其本身而言
只是一个数字矩阵
. 当您使用merge函数并将每个R、G和B通道设置为
同一矩阵
,有效地为每个像素为每个R、G、B值分配相同的值。如我们之前所知,当像素的每个“通道”具有相同的值时,“组合”总是从黑到白(或灰度)。
blue
你现在可以猜出正确的方法,而不是灰度。
正确的方法是将值保留在蓝色通道中,但将每个像素的其他通道设置为0。将所有频道设置为相同的值并不能使您获得“更多的特定颜色”,因为单独的值没有意义,它只是每个频道上的值的“组合”。
color = cv2.imread('lohri.jpg')
new_image = color.copy()
# set green and red channels to 0
new_image[:, :, 1] = 0
new_image[:, :, 2] = 0
cv2.imwrite("only_blue.jpg", new_image)