为什么要修改颜色,因为甲方不让我们自己喜好上颜色
比如一张图,长这样,我夸张一点,,但是效果比较好判断
1、把绿色去掉
img = cv2.imread("img.jpg") #用cv2读取照片
img = cv2.resize(img, (416, 416)) # 原图太大,这边resize一下
img[:, :, 1] = 0 # Green在第1通道,BGR有G的都置为0
这里发现原本黄色的也没了,还变成了红色,因为黄色的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)
紫色(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 # 小括号中括号效果一样
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之后补充