项目需要处理图片,然后找了N久的解决办法,有的是通过提取image 的所有通道判断来解决,但是结果会发现耗时非常久,假设是一张1000*1000的图,也要循环1000000次,对于批处理非常麻烦,偶然看到一个解决方法,特此记录:
import cv2
import numpy as np
path = "./test.png"
src = cv2.imread(path)
# Point 1: 生成与白色部分对应的mask图像
mask = np.all(src[:,:,:] == [255, 255, 255], axis=-1)
# Point 2: 将图片从三通道转为四通道
dst = cv2.cvtColor(src, cv2.COLOR_BGR2BGRA)
# Point3: 以mask图像为基础,使白色部分透明化
dst[mask,3] = 0
# 保存图片
cv2.imwrite("dst.png", dst)
如果需要将图的透明底转为不透明,则是改动如下:
import cv2
import numpy as np
path = "./test.png" # 透明底的图
src = cv2.imread(path)
# Point 1: 生成获得所有颜色通道对应的mask图像
mask = np.all(src[:,:,:], axis=-1)
# Point 2: 将图片从四通道转为三通道
dst = cv2.cvtColor(src, cv2.COLOR_BGRA2BGR)
# Point3: 以mask图像为基础,使不透明化
dst[mask,3] = 255 # 主要是修改alpha通道为不透明
# 保存图片
cv2.imwrite("dst.png", dst)
最终效果可能有点误差,但解决了图像从透明底改为不透明的情况 , 减少处理的时间
tmp = cv2.cvtColor(crop_image, cv2.COLOR_BGR2GRAY)
_, alpha = cv2.threshold(tmp, 0, 255, cv2.THRESH_BINARY)
b, g, r = cv2.split(crop_image)
rgba = [b, g, r, alpha]
dst = cv2.merge(rgba, 4)
# 注意保存成png格式!!!jpg的话还是黑色
背景
(255)
cv2.imwrite("test.png", dst)
Python
,
OpenCV
制作全
透明
图,简单的图片
1. 基本的图片操作方法
图片的读写与展示;(默认
opencv
读出来是 3通道的BGR图;
透明
图实质上是 BGRA的4通道图 )
图片的旋转、无损旋转
图片的放大、缩小、保留宽高比的放大缩小
绘制圆、文字、矩形、正方形、三角形、矩形
2. 截取ROI、增加行列
本文实例为大家分享了
python
opencv
实现证件照换
底
功能的具体代码,供大家参考,具体内容如下
思路:先转到HSV空间,利用颜色提取
背景
制作掩模版mask,然后通过按位操作提取人像和制作新
背景
,最后叠加
背景
和人像得到换
底
后照片
#-*-coding:utf-8-*-
import cv2
import numpy as np
def cvtBackground(path,color):
功能:给证件照更换
背景
色(常用
背景
色红、白、蓝)
输入参数:path:照片路径
color:
背景
色 <格式[B,G,R]>
im=cv2
img = cv2.imread("path")
img2 = cv2.cvtColor(img, cv2.COLOR_BGR2BGRA)
# 将img2中R,G,B值等于255的点的
透明
通道改为0,也就是全
透明
状态
img2[:, :, 3][np.where(img2[:, :, 0] == 255)] = 0
img2[:, ...
opencv
处理
透明
图片
opencv
处理
透明
图片,主要是考虑图片的叠加。//主函数操作
Mat dest,srcAlpha;// imread后一个参数为-1表示读取带有alpha通道的图片
srcAlpha = imread("C:\\Users\\Administrator\\Desktop\\1.png",-1);
dest= imread("C:\\Users\\Administra
contours, _ = cv2.findContours(thresh, cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_SIMPLE)
# 获取最大轮廓
cnt = max(contours, key=cv2.contourArea)
# 创建遮罩
mask = np.zeros(img.shape[:2], np.uint8)
# 在遮罩上绘制轮廓
cv2.drawContours(mask, [cnt], 0, (255, 255, 255), -1)
# 应用遮罩
result = cv2.bitwise_and(img, img, mask=mask)
# 将
白色
背景
设置为
透明
result[np.where((result == [255,255,255]).all(axis = 2))] = [255,255,255,0]
# 保存图片
cv2.imwrite("transparent_image.png", result)
请注意,上面代码假定您要将
背景
变成
白色
,并且将其设置为完全
透明
。如果您需要其他颜色或不
透明
度,则需要进行修改。
CSDN-Ada助手:
python opencv 将白色底变成透明底
CSDN-Ada助手: