伊滨区网站建设,dedecms精仿学校网站模板,与安网站建设,wordpress5.2.2中文Python 小白的课题报告—OpenCV 抠图项目实战#xff08;5#xff09;自适应阈值抠图 本系列是 Python 小白的课题作业《基于OpenCV 的图像分割和抠图》。 需要说明的是#xff0c;本系列并不能算是 OpenCV 的抠图项目教程#xff0c;只是以此为主题的课题报告。其中包括了…Python 小白的课题报告—OpenCV 抠图项目实战5自适应阈值抠图 本系列是 Python 小白的课题作业《基于OpenCV 的图像分割和抠图》。 需要说明的是本系列并不能算是 OpenCV 的抠图项目教程只是以此为主题的课题报告。其中包括了一个较为完整的 PyQt 项目。 欢迎关注『Python 小白的项目实战 youcans』 原创作品 Python 小白的课题报告—OpenCV 抠图项目实战1目录摘要 Python 小白的课题报告—OpenCV 抠图项目实战2抠图绪论 Python 小白的课题报告—OpenCV 抠图项目实战3抠图综述 Python 小白的课题报告—OpenCV 抠图项目实战4固定阈值抠图 Python 小白的课题报告—OpenCV 抠图项目实战5自适应阈值抠图 Python 小白的课题报告—OpenCV 抠图项目实战6色彩范围抠图 Python 小白的课题报告—OpenCV 抠图项目实战7边缘检测 Python 小白的课题报告—OpenCV 抠图项目实战8图像轮廓 Python 小白的课题报告—OpenCV 抠图项目实战9评价指标 Python 小白的课题报告—OpenCV 抠图项目实战10PyQt5 使用 Python 小白的课题报告—OpenCV 抠图项目实战11算法实验平台 Python 小白的课题报告—OpenCV 抠图项目实战12源程序代码 第三章 阈值抠图
阈值处理方法直观简单是一种基本的图像分割方法。
根据图像的整体或部分信息适当选择阈值像素值高于阈值时设为1/255低于阈值时设为0以此将图像中感兴趣的区域筛选出来生成掩模再与原图像合成即可得到抠图图像。
由于待处理图像的灰度级数与其灰度直方图是不确定的对于不同的图像、不同的目标前景需要选取适当的阈值处理方法进行图像分割。本章采用固定阈值、自适应阈值与色彩范围三种方法进行图像抠图处理。 3.2 自适应阈值抠图
在图像抠图的应用中噪声和非均匀光照等因素会影响阈值算法的性能。对于很多图像使用固定阈值难以获得理解的抠图效果就需要使用自适应阈值处理方法使用可变阈值处理。
自适应阈值处理可以根据图像不同区域的亮度分布使用高斯滤波、移动平均等方法计算其局部阈值以此得到抠图图像。
OpenCV 提供了函数 cv.adaptivethreshold()实现图像的阈值处理。
函数说明
cv.adaptiveThreshold(src, maxValue, adaptiveMethod, thresholdType, blockSize, C[, dst]) → dst参数说明
scr输入图像8位单通道图像dst输出图像大小和类型与输入图像相同maxValue二值处理的最大值设置通常为255adaptiveMethod自适应阈值算法 cv.ADAPTIVE_THRESH_MEAN_C阈值为矩形邻域像素值的均值cv.ADAPTIVE_THRESH_GAUSSIAN_C阈值为矩形邻域像素值的加权均值默认权值服从高斯分布 thresholdType阈值类型可选项THRESH_BINARY或THRESH_BINARY_INVblockSize自适应计算的邻域大小如3, 5, 7等C偏移量
使用自适应阈值进行图像抠图的基本程序如下
# MattingAdaptThresh.py
# Copyright 2021 youcans, XUPT
# Crated2021-12-10import cv2
import numpy as np
from matplotlib import pyplot as plt# 1. 读取原始图像
imgOri cv2.imread(../images/lady983Green.jpg) # 读取原始图像
height, width, channels imgOri.shape# 2. 从原始图像提取绿色通道
imgGray cv2.cvtColor(imgOri, cv2.COLOR_BGR2GRAY) # 彩色图像转换为灰度图像
imgGreen imgOri[:, :, 1] # imgGreen 为 绿色通道的 色彩强度图 (注意不是原图的灰度转换结果)
print(imgOri.shape, imgGray.shape, imgGreen.shape)# 3. 绿色通道转换为二值图像生成遮罩 Mask、逆遮罩 MaskInv
# colorThresh 245 # 绿屏背景的颜色阈值 (注意研究阈值的影响)
# ret, binary cv2.threshold(imgGreen, colorThresh, 255, cv2.THRESH_BINARY) # 转换为二值图像生成遮罩抠图区域黑色遮盖# 自适应阈值化能够根据图像不同区域亮度分布自适应地改变阈值
# cv.adaptiveThreshold(src, maxValue, adaptiveMethod, thresholdType, blockSize, C[, dst]) - dst
# 参数 adaptiveMethod: ADAPTIVE_THRESH_MEAN_C(均值法), ADAPTIVE_THRESH_GAUSSIAN_C(高斯法)
# 参数 thresholdType: THRESH_BINARY(小于阈值为0), THRESH_BINARY_INV(大于阈值为0)
# 参数 blockSize: 邻域大小正奇数
# 参数 C: 偏移量一般取 0
binary cv2.adaptiveThreshold(imgGreen, 255, cv2.ADAPTIVE_THRESH_MEAN_C, cv2.THRESH_BINARY_INV, 5, 0)
binaryInv cv2.bitwise_not(binary) # 按位非(黑白转置)生成逆遮罩抠图区域白色开窗抠图以外区域黑色# 4. 用遮罩进行抠图和更换背景
# 生成抠图图像 (前景保留背景黑色)
imgMatte cv2.bitwise_and(imgOri, imgOri, maskbinaryInv) # 生成抠图前景标准抠图以外的逆遮罩区域输出黑色
# 将背景颜色更换为红色: 修改逆遮罩 (抠图以外区域黑色)
imgReplace imgOri.copy()
imgReplace[binaryInv 0] [0, 0, 255] # 黑色区域(0/0/0)修改为红色(BGR:0/0/255)plt.figure(figsize(12, 8))
plt.subplot(231), plt.imshow(cv2.cvtColor(imgOri, cv2.COLOR_BGR2RGB)), plt.title(Origin image), plt.axis(off)
plt.subplot(232), plt.imshow(imgGray, cmapgray), plt.title(Gray image), plt.axis(off)
plt.subplot(233), plt.imshow(imgGreen, cmapgray), plt.title(Green channel level), plt.axis(off)
plt.subplot(234), plt.imshow(binary, cmapgray), plt.title(binary mask), plt.axis(off)
plt.subplot(235), plt.imshow(binaryInv, cmapgray), plt.title(inv-binary mask), plt.axis(off)
plt.subplot(236), plt.imshow(cv2.cvtColor(imgReplace, cv2.COLOR_BGR2RGB)), plt.title(BgColor changed), plt.axis(off)
plt.tight_layout()使用自适应阈值方法对单色背景图像抠图的结果如图3.4所示。 对于确定颜色背景的蓝屏抠图自适应阈值方法的结果并没有更好但是仍然能很好地提取图像特征如果使用其它方法进一步进行处理也可以得到满意的抠图效果。 而对于自然背景图像抠图自适应阈值方法的性能优于固定阈值方法。 图3.4 自适应阈值抠图法
【本节完】 版权声明
欢迎关注『Python 小白的项目实战 youcans』 原创作品
原创作品转载必须标注原文链接https://blog.csdn.net/youcans/article/details/122296231
Copyright 2022 youcans, XUPT
Crated2022-01-01 欢迎关注『Python 小白的项目实战 youcans』 原创作品 Python 小白的课题报告—OpenCV 抠图项目实战1目录摘要 Python 小白的课题报告—OpenCV 抠图项目实战2抠图绪论 Python 小白的课题报告—OpenCV 抠图项目实战3抠图综述 Python 小白的课题报告—OpenCV 抠图项目实战4固定阈值抠图 Python 小白的课题报告—OpenCV 抠图项目实战5自适应阈值抠图 Python 小白的课题报告—OpenCV 抠图项目实战6色彩范围抠图 Python 小白的课题报告—OpenCV 抠图项目实战7边缘检测 Python 小白的课题报告—OpenCV 抠图项目实战8图像轮廓 Python 小白的课题报告—OpenCV 抠图项目实战9评价指标 Python 小白的课题报告—OpenCV 抠图项目实战10PyQt5 使用 Python 小白的课题报告—OpenCV 抠图项目实战11算法实验平台 Python 小白的课题报告—OpenCV 抠图项目实战12源程序代码