使用openCV或PIL库修改图片的颜色

为什么要修改颜色,因为甲方不让我们自己喜好上颜色

比如一张图,长这样,我夸张一点,,但是效果比较好判断

使用openCV或PIL库修改图片的颜色_第1张图片

 

1、把绿色去掉

img = cv2.imread("img.jpg") #用cv2读取照片
img = cv2.resize(img, (416, 416)) # 原图太大,这边resize一下
img[:, :, 1] = 0 # Green在第1通道,BGR有G的都置为0

 使用openCV或PIL库修改图片的颜色_第2张图片

这里发现原本黄色的也没了,还变成了红色,因为黄色的RGB为(255,255,0),所以G通道也是存在的,被置0后RGB从

(255,255,0)-----  (255, 0 , 0)红色

2、把红色去掉

同理

img = cv2.imread("img.jpg")
img = cv2.resize(img, (416, 416))
img[:, :, 2] = 0  #这边把红色通道置为0,因为是BGR所以红色是第2通道,如果想转RGB,    cv2.cvtColor(img,cv2.COLOR_BGR2RGB)

使用openCV或PIL库修改图片的颜色_第3张图片

紫色(255, 0 ,255)-------  (0, 0, 255)蓝色

黄色(255,255 ,0)-------  (0,255, 0 )绿色

3、把红色和绿色都去掉

img = cv2.imread("img.jpg") #用cv2读取照片
img = cv2.resize(img, (416, 416)) # 原图太大,这边resize一下
img[:, :, (1, 2)] = 0 # 小括号中括号效果一样

使用openCV或PIL库修改图片的颜色_第4张图片

4、根据某个rgb的值筛选颜色

例如:只删除红色,其他不变:

img = cv2.imread("img.jpg")
img = cv2.resize(img, (416, 416))
for i in img:
    for j in i:#遍历每个像素点
        if j[0] == 0 and j[1] == 0 and j[2] == 255:
            j[0] = 0
            j[1] = 0
            j[2] = 0
 cv2.imshow("img", img)
 cv2.waitKey(0)

不光适用于==,给一个范围用< >也可以 

这种方法对于图片小的运算速度还行,要是图很大,几百万个像素,速度不行 

使用openCV或PIL库修改图片的颜色_第5张图片

本人比较懒opencv写的简单,PIL之后补充

你可能感兴趣的:(Python,opencv,图像处理,python)