前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >OpenCV技巧 | 常用格式图片保存为透明背景图片(附Python源码)-教你轻松制作Logo

OpenCV技巧 | 常用格式图片保存为透明背景图片(附Python源码)-教你轻松制作Logo

作者头像
Color Space
发布2021-08-20 15:17:37
8.1K0
发布2021-08-20 15:17:37
举报
文章被收录于专栏:OpenCV与AI深度学习

导读

本文主要介绍使用OpenCV将常用格式图片保存为透明背景图片的方法与实现代码。

实现目标

本文的目标有如下两个:

① 将常见格式[jpg/png/bmp]白色背景图片转换保存为透明背景图片;

② 将常见格式[jpg/png/bmp]复杂背景图片转换保存为透明背景图片。

实现步骤与详细演示

实现步骤:

① 彩色模式加载图片;

② 将图像由BGR颜色空间转换为BGRA颜色空间;

③ 将原图中白色位置的像素值对应A通道均置为0;

④ 将处理后的图像保存为PNG格式。

代码实现与演示:

待处理图像:

处理结果图像:

仔细对比看下区别(白色背景和透明背景):

Alpha通道处理结果(白色部分被保留,黑色部分最终为透明背景):

换个图片试试效果:

Python-OpenCV实现代码:

代码语言:javascript
复制
import cv2
import numpy as np

img = cv2.imread("opencv.jpg")
cv2.imshow('src', img)
print(img.shape)

result = cv2.cvtColor(img, cv2.COLOR_BGR2BGRA)

for i in range(0,img.shape[0]): #访问所有行
    for j in range(0,img.shape[1]): #访问所有列
        if img[i,j,0] > 200 and img[i,j,1] > 200 and img[i,j,2] > 200:
            result[i,j,3] = 0

cv2.imwrite('result.png', result, [int(cv2.IMWRITE_PNG_COMPRESSION), 0])
print(result.shape)
cv2.imshow('result', result)
B,G,R,A = cv2.split(result)
cv2.imshow('B', B)
cv2.imshow('G', G)
cv2.imshow('R', R)
cv2.imshow('A', A)
 
cv2.waitKey()
cv2.destroyAllWindows()

如果图片背景复杂一点怎么办?万变不离其宗,只要将你想要保留的部分的Alpha通道对应部分灰度值变为255,不想保留的部分Alpha通道对应部分灰度值变为0,然后保存为PNG图片即可。

以下面图片为例:

目标是提取中间部分花,然后处理为透明背景。提取花可以将原图的R通道阈值处理后直接作为Alpah通道即可。

R通道分离效果:

二值化效果:

代码实现与最终结果:

代码语言:javascript
复制
import cv2
import numpy as np

img = cv2.imread("flower.jpg")
cv2.imshow('src', img)
print(img.shape)

result = cv2.cvtColor(img, cv2.COLOR_BGR2BGRA)

B,G,R = cv2.split(img)

_, Alpha= cv2.threshold(R, 200, 255, cv2.THRESH_BINARY)
cv2.imshow('thres', Alpha)

B2,G2,R2,A2 = cv2.split(result)
A2 = Alpha
result = cv2.merge([B2,G2,R2,A2]) #通道合并

cv2.imwrite('result.png', result)
print(result.shape)
cv2.imshow('result', result)
B,G,R,A = cv2.split(result)
cv2.imshow('B', B)
cv2.imshow('G', G)
cv2.imshow('R', R)
cv2.imshow('A', A)
 
cv2.waitKey()
cv2.destroyAllWindows()
本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2021-08-07,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 OpenCV与AI深度学习 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 实现目标
  • 实现步骤与详细演示
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档