添加链接
link之家
链接快照平台
  • 输入网页链接,自动生成快照
  • 标签化管理网页链接

项目需要处理图片,然后找了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和图像处理感兴趣,我强烈推荐您写一篇博客介绍如何使用Python中的OpenCV库来进行图像分割。这个话题可以帮助读者更好地理解图像处理的基本概念和算法,并且是一个非常实用的技能。期待您的下一篇博客! 为了方便博主创作,提高生产力,CSDN上线了AI写作助手功能,就在创作编辑器右侧哦~(https://mp.csdn.net/edit?utm_source=blog_comment_recall )诚邀您来加入测评,到此(https://activity.csdn.net/creatActivity?id=10450&utm_source=blog_comment_recall)发布测评文章即可获得「话题勋章」,同时还有机会拿定制奖牌。 python opencv 将白色底变成透明底 CSDN-Ada助手: 不知道 Python入门 技能树是否可以帮到你:https://edu.csdn.net/skill/python?utm_source=AI_act_python