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

6 篇文章 ¥39.90 ¥99.00
本文详细介绍了如何利用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
<think>我们正在处理图像二值化问题。根据引用[2]和[3],OpenCV-Python提供了cv.threshold函数进行图像二值化处理。 步骤: 1. 读取图像(如果是彩色图像,通常先转为灰度图像) 2. 使用cv.threshold函数进行二值化 3. 显示或保存结果 函数说明: cv.threshold(src, thresh, maxval, type[, dst]) → retval, dst 参数: src: 输入图像(灰度图像) thresh: 阈值 maxval: 当像素值超过阈值(或低于阈值,根据type而定)时赋予的新值 type: 阈值处理类型,常见的有: cv.THRESH_BINARY: 大于阈值的部分取maxval,否则取0 cv.THRESH_BINARY_INV: 与上述相反 cv.THRESH_TRUNC: 大于阈值的部分取阈值,其余不变 cv.THRESH_TOZERO: 大于阈值的部分不变,否则取0 cv.THRESH_TOZERO_INV: 与上述相反 返回值: retval: 实际使用的阈值(在自适应阈值中会用到) dst: 二值化后的图像 另外,引用[3]提到还有自适应阈值(局部阈值)的方法:cv.adaptiveThreshold 自适应阈值函数: cv.adaptiveThreshold(src, maxValue, adaptiveMethod, thresholdType, blockSize, C[, dst]) → dst 参数: src: 输入灰度图像 maxValue: 满足条件的像素点将要设置的值 adaptiveMethod: 自适应方法,有两种: cv.ADAPTIVE_THRESH_MEAN_C: 邻域内均值 cv.ADAPTIVE_THRESH_GAUSSIAN_C: 邻域内高斯加权和 thresholdType: 必须是cv.THRESH_BINARY或cv.THRESH_BINARY_INV blockSize: 邻域大小(奇数) C: 从计算的平均值或加权平均值中减去的常数 注意:自适应阈值不需要全局阈值,而是根据局部邻域计算阈值。 根据用户需求,他询问的是图像二值化处理方法,因此我们将介绍全局阈值和自适应阈值两种方法。 下面给出代码示例:</think>### OpenCV-Python 图像二值化处理方法 图像二值化是将灰度图像转为黑白图像的过程,OpenCV-Python 提供了两种主要方法: #### 一、全局阈值法(`cv2.threshold`) 通过设定固定阈值进行二值化: ```python import cv2 # 读取图像并转为灰度图 img = cv2.imread('input.jpg') gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY) # 全局阈值处理 ret, binary = cv2.threshold( gray, # 输入灰度图像 127, # 阈值(0-255) 255, # 最大值(二值化后白色值) cv2.THRESH_BINARY # 阈值类型 ) # 显示结果 cv2.imshow('Binary Image', binary) cv2.waitKey(0) ``` **常用阈值类型**: 1. `cv2.THRESH_BINARY`:大于阈值设为 maxval,否则为 0 $dst(x,y) = \begin{cases} maxval & \text{if } src(x,y) > thresh \\ 0 & \text{otherwise} \end{cases}$ 2. `cv2.THRESH_BINARY_INV`:反向二值化 3. `cv2.THRESH_TRUNC`:大于阈值设为阈值,否则不变 4. `cv2.THRESH_OTSU`:自动计算最优阈值(需与上述类型组合使用)[^3] **示例(Otsu 自动阈值)**: ```python ret, otsu_bin = cv2.threshold(gray, 0, 255, cv2.THRESH_BINARY + cv2.THRESH_OTSU) ``` #### 二、自适应阈值法(`cv2.adaptiveThreshold`) 适用于光照不均的图像,局部计算阈值: ```python adaptive_bin = cv2.adaptiveThreshold( gray, 255, # 最大值 cv2.ADAPTIVE_THRESH_GAUSSIAN_C, # 自适应方法 cv2.THRESH_BINARY, # 阈值类型 11, # 邻域大小(奇数) 2 # 常数偏移量C ) ``` **自适应方法**: 1. `cv2.ADAPTIVE_THRESH_MEAN_C`:邻域均值 $T(x,y) = \mu_{neighborhood} - C$ 2. `cv2.ADAPTIVE_THRESH_GAUSSIAN_C`:邻域高斯加权和 $T(x,y) = G_{\sigma} * I(x,y) - C$[^3] #### 选择建议: - **全局阈值**:图像光照均匀时使用(简单高效) - **自适应阈值**:光照不均或背景复杂时使用(计算量较大) - **Otsu算法**:直方图有双峰时自动确定阈值 > 注意:二值化前建议进行高斯模糊降噪: > ```python > blurred = cv2.GaussianBlur(gray, (5,5), 0) > ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

流浪猪头拯救地球

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

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

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

打赏作者

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

抵扣说明:

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

余额充值