【课题总结】OpenCV 抠图项目实战(4)固定阈值抠图

Python 小白的课题报告—OpenCV 抠图项目实战(4)固定阈值抠图

本系列是 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 抠图项目实战(10)PyQt5 使用
Python 小白的课题报告—OpenCV 抠图项目实战(11)算法实验平台
Python 小白的课题报告—OpenCV 抠图项目实战(12)源程序代码


第三章 阈值抠图

阈值处理方法直观简单,是一种基本的图像分割方法。

根据图像的整体或部分信息适当选择阈值,像素值高于阈值时设为1/255,低于阈值时设为0,以此将图像中感兴趣的区域筛选出来生成掩模,再与原图像合成即可得到抠图图像。

由于待处理图像的灰度级数与其灰度直方图是不确定的,对于不同的图像、不同的目标前景,需要选取适当的阈值处理方法进行图像分割。本章采用固定阈值、自适应阈值与色彩范围三种方法进行图像抠图处理。


3.1 固定阈值抠图

蓝屏抠图问题泛指已知背景颜色的单一背景颜色图像抠图,广泛应用于证件拍照、影视制作。由于背景颜色是确定已知的,可以使用固定阈值方法进行图像抠图和背景颜色更换。

固定阈值抠图方法先将彩色图像转化为灰度图像,再基于适当的颜色阈值对图像进行阈值处理生成二值化掩模遮罩图像。将掩模遮罩与原始图像合成就得到抠图图像,将掩模遮罩与新的背景图片合成就可以更换图像背景。

固定阈值处理方法的阈值,可由人工经验选择或基于图像直方图进行选择。对于蓝屏抠图问题,通常使用固定阈值处理方法就可以获得较好的结果。

OpenCV 提供了函数 cv.threshold()实现图像的阈值处理。

函数说明:

cv.threshold(src, thresh, maxval, type[, dst]) → ret, dst

函数 threshold() 将灰度图像转换为二值图像(Binarization),即图像完全由像素 0 和 255 构成,呈现出只有黑白两色的视觉效果,突出图片的轮廓。

该方法通过固定阈值 thresh 处理图像,也称固定阈值处理方法。

参数说明:

  • scr:进行阈值处理的灰度图像
  • thresh:阈值,取值范围 0~255
  • maxval:填充色,取值范围 0~255,一般取 255
  • type:阈值类型
    • cv2.THRESH_BINARY:小于阈值的像素置 0,大于阈值的像素置 maxval;
    • cv2.THRESH_BINARY_INV:小于阈值的像素置 maxval,大于阈值的像素置 0;
    • cv2.THRESH_TRUNC:小于阈值的像素不变(保持原值),大于阈值的像素置阈值thresh;
    • cv2.THRESH_TOZERO:小于阈值的像素置 0,大于阈值时不变(保持原值)
    • cv2.THRESH_TOZERO_INV:大于阈值的像素置 0,小于阈值时不变(保持原值)
    • cv2.THRESH_OTSU:使用 OTSU 算法选择阈值
  • dst:返回二值化的灰度图像
  • ret:返回二值化的阈值

使用固定阈值进行图像抠图的基本程序如下:

# MattingThresh.py
# Copyright 2021 youcans, XUPTy
# Crated:2021-12-10 # 1. 读取原始图像
imgOri = cv2.imread("../images/lady983Green.jpg") # 读取原始图像
width, height, 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 = 220 # 绿屏背景的颜色阈值 (注意研究阈值的影响)
ret, binary = cv2.threshold(imgGreen, colorThresh, 255, cv2.THRESH_BINARY) # 转换为二值图像,生成遮罩,抠图区域黑色遮盖
binaryInv = cv2.bitwise_not(binary) # 按位非(黑白转置),生成逆遮罩,抠图区域白色开窗,抠图以外区域黑色# 4. 用遮罩进行抠图和更换背景
# 生成抠图图像 (前景保留,背景黑色)
imgMatte = cv2.bitwise_and(imgOri, imgOri, mask=binaryInv) # 生成抠图前景,标准抠图以外的逆遮罩区域输出黑色# 将背景颜色更换为红色: 修改逆遮罩 (抠图以外区域黑色)
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, cmap='gray'), plt.title("Gray image"), plt.axis('off')
plt.subplot(233), plt.imshow(imgGreen, cmap='gray'), plt.title("Green channel level"), plt.axis('off')
plt.subplot(234), plt.imshow(binaryInv, cmap='gray'), plt.title("inv-binary mask"), plt.axis('off')
plt.subplot(235), plt.imshow(cv2.cvtColor(imgMatte, cv2.COLOR_BGR2RGB)), plt.title("Matting Image"), plt.axis('off')
plt.subplot(236), plt.imshow(cv2.cvtColor(imgReplace, cv2.COLOR_BGR2RGB)), plt.title("BgColor changed"), plt.axis('off')
plt.tight_layout()
plt.show()

使用固定阈值方法对单色背景图像抠图的结果如图3.1~图3.3所示。

图中:inv-binary mask为生成的掩膜图像,Matting Image为生成的目标前景图像,BgColor changed为合成的抠图图像。

需要说明的是,图中的结果并不是将原始图像转换为灰度图像进行阈值处理,而是提取原始图像的绿色通道(imaGreen)处理的结果。由于原始图像的背景就是绿色,使用图像绿色通道进行阈值处理,其性能比灰度图像得到了显著提高。

(1)使用固定阈值方法对单色背景图像抠图,可以取得比较满意的结果;
(2)阈值设置对蓝屏抠图的性能影响较大,图3.1~图3.3分别是阈值设置为220、230、245时的实验结果。

由以上三组图片对比可以看到,阈值较大时的掩膜图像较为精确完整,而阈值降低后的掩膜图像质量降低。

固定阈值方法对于蓝色/绿色/红色背景的图像抠图的性能较好,但对于自然背景图像处理比较困难。


在这里插入图片描述
图3.1 固定阈值抠图法(阈值=245)


在这里插入图片描述
图3.2 固定阈值抠图法(阈值=230)


在这里插入图片描述

图3.3 固定阈值抠图法(阈值=220)

【本节完】


版权声明:

欢迎关注『Python 小白的项目实战 @ youcans』 原创作品

原创作品,转载必须标注原文链接:https://blog.csdn.net/youcans/article/details/122306621

Copyright 2022 youcans, XUPT

Crated:2022-01-05


欢迎关注『Python 小白从零开始 PyQt5 项目实战 @ 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 抠图项目实战(10)PyQt5 使用
Python 小白的课题报告—OpenCV 抠图项目实战(11)算法实验平台
Python 小白的课题报告—OpenCV 抠图项目实战(12)源程序代码

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/565881.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

数学公式验证码

给出简单的数学算法&#xff08;加减法运算&#xff09;&#xff0c;计算结果为验证码。 效果演示 原始样式 点击换一张或者点击验证码图片的时候随机生成新的数学验证码 输入错误的验证码 输入正确的验证码 代码演示 注意&#xff1a;引入两个架包 <script type&qu…

【课题总结】OpenCV 抠图项目实战(5)自适应阈值抠图

Python 小白的课题报告—OpenCV 抠图项目实战&#xff08;5&#xff09;自适应阈值抠图 本系列是 Python 小白的课题作业《基于OpenCV 的图像分割和抠图》。 需要说明的是&#xff0c;本系列并不能算是 OpenCV 的抠图项目教程&#xff0c;只是以此为主题的课题报告。其中包括了…

滑动验证

拖动滑块进行验证码的验证。 滑动验证有两种&#xff1a; 图片滑动验证长方形的滑动条验证 一 &#xff1a; 图片滑动验证 效果演示 原始样式 没有正确验证的时候滑块会直接回到初始位置让你再次滑动验证 验证成功会给出提示 看代码之前**注意&#xff1a;**代码中要引…

Feedback Prize-Kaggle比赛调研

1.比赛调研 1.1 比赛链接 Feedback Prize - Predicting Effective Arguments | Kaggle 1.2 比赛周期 5.24-8.23 1.3 比赛的快速介绍 本次比赛的目标是将学生写作中的争论元素分类为“有效”、“充分”或“无效”。您将创建一个使用代表美国 6 至 12 年级人口的数据进行训…

【课题总结】OpenCV 抠图项目实战(6)色彩范围抠图

Python 小白的课题报告—OpenCV 抠图项目实战&#xff08;6&#xff09;色彩范围抠图 本系列是 Python 小白的课题作业《基于OpenCV 的图像分割和抠图》。 需要说明的是&#xff0c;本系列并不能算是 OpenCV 的抠图项目教程&#xff0c;只是以此为主题的课题报告。其中包括了一…

点选验证码

根据图片下方文字提示点击图片验证码对应的文字完成验证。 效果演示 原始样式 点击文字错误时 点击验证成功 在欣赏代码之前**注意&#xff1a;**引入两个架包 <script type"text/javascript" src"js/jquery.min.js"></script> <scri…

【课题总结】OpenCV 抠图项目实战(7)边缘检测

Python 小白的课题报告—OpenCV 抠图项目实战&#xff08;7&#xff09; 本系列是 Python 小白的课题作业《基于OpenCV 的图像分割和抠图》。 需要说明的是&#xff0c;本系列并不能算是 OpenCV 的抠图项目教程&#xff0c;只是以此为主题的课题报告。其中包括了一个较为完整的…

一文带你了解美国运通比赛

1.比赛调研 1.1 比赛链接 American Express - Default Prediction | Kaggle 1.2 比赛周期 8.24截止 1.3 比赛的快速介绍 无论是在餐厅外出还是购买音乐会门票&#xff0c;现代生活都依靠信用卡的便利进行日常购物。它使我们免于携带大量现金&#xff0c;还可以提前全额购…

【python】Ubuntu下安装spyder及matplotlib中文显示

一、查看Ubuntu版本 $ lsb_release -a No LSB modules are available. Distributor ID: Ubuntu Description: Ubuntu 22.04.3 LTS Release: 22.04 Codename: jammy尝试用cat /etc/debian_version命令&#xff0c;竟然可以显示出来Debian的版本。 $ cat /etc/debian_version …

【课题总结】OpenCV 抠图项目实战(8)图像轮廓

Python 小白的课题报告—OpenCV 抠图项目实战&#xff08;8&#xff09; 本系列是 Python 小白的课题作业《基于OpenCV 的图像分割和抠图》。 需要说明的是&#xff0c;本系列并不能算是 OpenCV 的抠图项目教程&#xff0c;只是以此为主题的课题报告。其中包括了一个较为完整的…

SQLServer 联合查询

联合查询分为内连接和外连接两个 一&#xff1a; 外连接又分为&#xff1a;左连接、右连接、完全外连接。 1. 左连接 left join或 left outer join SQL语句&#xff1a; select * from student left join course student .IDcourse.ID语句解说&#xff1a;左外连接包含left …

H5 五子棋小游戏

用H5实现双人五子棋小游戏。 功能分解&#xff1a; 棋盘的大小自己设置白色棋子和黑色棋子的点击事件有棋子的地方不能再次放棋子判断同色棋子是否够五个够五个之后弹框显示胜利 效果演示 原始样式 选择之后开始游戏 有没有一种特别好玩的感觉呢&#xff1f;&#xff1f;…

【课题报告】OpenCV 抠图项目实战(10)PyQt5 使用

Python 小白的课题报告—OpenCV 抠图项目实战&#xff08;10&#xff09;PyQt5 使用 本系列是 Python 小白的课题作业《基于OpenCV 的图像分割和抠图》。 需要说明的是&#xff0c;本系列并不能算是 OpenCV 的抠图项目教程&#xff0c;只是以此为主题的课题报告。其中包括了一个…

IDEA 生成get和set方法

使用IDEA自动生成get和set方法。 在IDEA中使用快捷键altinsert. 图解示例 要生成get和set的页面 使用altinsert快捷键 点击Getter and Setter 全部选中 点击ok之后get和set方法就自动生成了

【课题总结】OpenCV 抠图项目实战(11)算法实验平台

Python 小白的课题报告—OpenCV 抠图项目实战&#xff08;11&#xff09;抠图算法实验平台 本系列是 Python 小白的课题作业《基于OpenCV 的图像分割和抠图》。 需要说明的是&#xff0c;本系列并不能算是 OpenCV 的抠图项目教程&#xff0c;只是以此为主题的课题报告。其中包括…

IDEA 配置Tomcat

在IDEA上配置本地的Tomcat服务。 1.点击右上角如图红色圆圈圈中的Add Configuration… 2. 点击号 3. 向下查找Tomcat Server, 然后选择Local (如果没有Tomcat Server 点击33more items… 就能找到了) 4. 点击Local之后&#xff08;我的是已经配置过的&#xff0c;如果没有配…

【课题总结】OpenCV 抠图项目实战(12)源程序代码

Python 小白的课题报告—OpenCV 抠图项目实战&#xff08;12&#xff09;源程序代码 本系列是 Python 小白的课题作业《基于OpenCV 的图像分割和抠图》。 需要说明的是&#xff0c;本系列并不能算是 OpenCV 的抠图项目教程&#xff0c;只是以此为主题的课题报告。其中包括了一个…

【OpenCV 例程200篇】67. 空间域图像增强的综合应用

【OpenCV 例程200篇】67. 空间域图像增强的综合应用 欢迎关注 『OpenCV 例程200篇』 系列&#xff0c;持续更新中 欢迎关注 『Python小白的OpenCV学习课』 系列&#xff0c;持续更新中 5. 空间域图像增强技术的综合应用 空间域图像增强的方法很多&#xff0c;各有不同的特点和…

Vue 双向绑定小案例

用Vue实现双向绑定的小案例。 **双向绑定&#xff1a;**使用了双向绑定的两个内容一定是完全一样&#xff0c;同时变化&#xff08;同增同减&#xff09; 效果图 原始样式 删除输入框内容上面显示的文本内容随之减少 在下面输入框输入内容上面显示的内容也会增加 **注意&…

【OpenCV 例程200篇】68. 连续周期信号的傅立叶级数

【OpenCV 例程200篇】68. 连续周期信号的傅立叶级数 欢迎关注 『OpenCV 例程200篇』 系列&#xff0c;持续更新中 欢迎关注 『Python小白的OpenCV学习课』 系列&#xff0c;持续更新中 1. 频率域图像滤波 图像滤波是在尽可能保留图像细节特征的条件下对目标图像的噪声进行抑制…