ICode9

精准搜索请尝试: 精确搜索
首页 > 编程语言> 文章详细

python opencv给证件照换底色

2021-12-12 20:30:21  阅读:156  来源: 互联网

标签:copy return img python image mask opencv 证件照 255


昨天朋友忙要把白色背景的证件照换为红色的,比较急用,本人也不太会用PS,网上的那些转换小工具都是要收费的,就想着自己搞一搞,原理很简单,白色背景的像素值为[255,255,255],用这个信息生成mask,再将生成的Mask对应回原图像将背景区域换为红色的像素值[256,0,0]即可实现。

read image

def read_source_image(image_path):
    img = cv2.imread(image_path)
    return img

resize

def resize(img,height,whight):
    return cv2.resize(img,(whight,height))

生成mask

def generator_mask(img):
    """
    :param img: source image
    :return: mask
    """
    mask = np.zeros_like(img)
    row,col,channels = img.shape
    for i in range(row):
        for j in range(col):
            if sum(img[i, j]) == 255 * 3:
                mask[i, j] = (255, 255, 255)
            else:
                mask[i, j] = [0, 0, 0]
    # Gaussian Blur
    mask = cv2.GaussianBlur(mask, (7, 7), 0)
    return mask

白色转红色

def white_to_red(img,mask):
    """
    :param img: source image
    :param mask: mask image
    :return: red background image
    """
    img_copy = np.zeros_like(img)
    row, col, channels = img.shape
    for i in range(row):
        for j in range(col):
            if sum(mask[i,j]) != 0:
                img_copy[i,j] = [0,0,255]
            else:
                img_copy[i,j] = img[i,j]
    return img_copy

白色转蓝色

def white_to_blue(img,mask):
    """
    :param img: source image
    :param mask: mask image
    :return: Blue background image
    """
    img_copy = np.zeros_like(img)
    row, col, channels = img.shape
    for i in range(row):
        for j in range(col):
            if sum(mask[i,j]) != 0:
                img_copy[i,j] = [255,0,0]
            else:
                img_copy[i,j] = img[i,j]
    return img_copy

我自己转出来的结果还可以,但是在人的边缘位置上还是能够看到有瑕疵,所以在mask生成里面做了高斯模糊,实验验证是有用的,经过高斯模糊之后生成的图像质量改了很多,但在真用的时候还是会有一些问题,比如背景并不是纯白色的时候,分割就会有问题,后面有时间的话可以考虑用分割的方法来继续完善这个小工具。

标签:copy,return,img,python,image,mask,opencv,证件照,255
来源: https://blog.csdn.net/lwf1881/article/details/121892740

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有