【SRC-Python-OpenCV】给照片更换背景色

Part.I Introduction

本文将介绍如何用 OpenCV 更换图片的背景色(附有完整代码)。

需要装一个包(很小,几十兆)

pip install opencv-python

Part.II Main_body

Chap.I 源码简析

基本配置:包括输入文件名、输出文件名、目标背景颜色(BGR)

filename_in=r'A:/OHanlon/Desktop/1017451354889.png'
filename_out=r'A:/OHanlon/Desktop/b.jpg'
color_target_bg=(255, 255, 255) #BGR

数据处理部分的流程大致如下:

  1. 将图片转换为灰度图片
  2. 图片二值化处理
  3. 腐蚀膨胀
  4. 遍历替换

调用 OpenCV 里面的主要的函数有

# 将图片转换为灰度图片
gray_img = cv2.cvtColor(new_img, cv2.COLOR_BGR2HSV)
# 腐蚀膨胀
erode = cv2.erode(binary_img, None, iterations=1)
dilate = cv2.dilate(erode, None, iterations=1)

Chap.II 效果展示

左边是原图,右边是转换后的图(好像只能将蓝底变为红底或白底)

在这里插入图片描述

在这里插入图片描述

Part.III 源码

整个源码如下:

import cv2
import numpy as np

def changeBackgroundColor():
    filename_in=r'A:/OHanlon/Desktop/1017451354889.png'
    filename_out=r'A:/OHanlon/Desktop/b.jpg'
    color_target_bg=(255, 255, 255) #BGR

    img = cv2.imread(filename_in, 1)
    new_img = cv2.resize(img, None, fx=0.5, fy=0.5)

    rows, cols, channels = new_img.shape
    print(rows, cols, channels)

    # 显示图像
    cv2.imshow('source', new_img)

    # 将图片转换为灰度图片
    gray_img = cv2.cvtColor(new_img, cv2.COLOR_BGR2HSV)

    # 图片二值化处理
    low_value = np.array([90, 70, 70])
    high_value = np.array([110, 255, 255])
    binary_img = cv2.inRange(gray_img, low_value, high_value)

    # 腐蚀膨胀
    erode = cv2.erode(binary_img, None, iterations=1)
    dilate = cv2.dilate(erode, None, iterations=1)
    # cv2.imshow('dilate', dilate)

    # 遍历替换
    for i in range(rows):
        for j in range(cols):
            if dilate[i, j] == 255:
                # 此处替换颜色,为BGR通道
                new_img[i, j] = color_target_bg   # (0, 0, 255)替换为红底   (255, 255, 255)替换为白底

    cv2.imshow('result', new_img)
    cv2.imwrite(filename_out,new_img)
    # 窗口等待命令  0表示无限等待
    cv2.waitKey(0)
    cv2.destroyAllWindows()

# CALL function
changeBackgroundColor()

Reference

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

流浪猪头拯救地球

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值