1.基于Python+Opencv实现改变logo颜色
1.1.需掌握的Opencv基础知识
- 图片读取
- 颜色通道的改变
- 全局二值化
- 颜色通道的分离
- 颜色通道的融合(这个除了涉及到BGR三颜色通道外,还涉及到alpha通道)
- 图片保存
1.2.相关Opencv的API使用
-
读取图片–imread(filename)
filename:输入图片的相对路径或绝对路径
-
改变颜色通道–cvtColor(src,code)
本博客的颜色通道偏码,即code包括:COLOR_BGR2GRAY和COLOR_GRAY2BGR
-
全局二值化–threshold(src,thresh, maxval, type[, dst])
thresh:设定阈值
maxval:设置最大值,一般为255
type:THRESH_BINARY,该二值化的方式,若像素值大于阈值,则像素变为255,否则变为0
返回值:阈值(retval)和目标图片(dst) -
分离颜色通道–split(m)
m:输入通道数大于1的图片
返回值为mv,即通道数 -
融合颜色通道–merge(mv)
mv:输入需要融合的颜色通道数,是一个元组或列表
dst:返回处理后得到的图片 -
保存图片–imwrite(filename,img)
filename:保存路径
img:输入需要保存的图片
1.3.code实现步骤
- 图片读取
- 将彩色图转换为灰度图
- 使用全局二值化
- 将灰度图转化为三颜色通道,是为了第4颜色通道作准备,即alpha通道,目的是将黑背景去掉
- 分离通道
- 融合通道
- 展示图片
- 图片保存
- 摧毁窗口,结束
import cv2
#读取图片
img = cv2.imread("fs.png")
#灰度处理,是为了将logo的颜色变为白色
dst = cv2.cvtColor(img,cv2.COLOR_BGR2GRAY)
#二值化处理
ret,dst = cv2.threshold(dst,60,255,cv2.THRESH_BINARY)
#彩图处理
dst3 = cv2.cvtColor(dst,cv2.COLOR_GRAY2BGR)
#分离通道
b, g, r = cv2.split(dst3)
#通道融合
rgba = (b, g, r, dst)
dst4 = cv2.merge(rgba)
#展示结果
cv2.imshow("img",img)
cv2.imshow("dst",dst)
cv2.imshow("dst4",dst4)
#图片保存
cv2.imwrite("fs_result.png",dst4)
#摧毁窗口,结束
cv2.waitKey(0)
cv2.destroyAllWindows()
1.4. 结果输出展示
dst4窗口虽然展示的是黑色背景,但其实它是一个4通道图像,已经使用alpha通道处理过了,最终在保存路径中可以看到的是一个白色logo,透明背景的目标图像,效果如下:
若要转载,请注明出处,谢谢!