当前位置: 首页 > news >正文

网站优化知识资讯元素网站

网站优化知识资讯,元素网站,好用的在线设计网站,网站开发策略都有啥Python 小白的课题报告—OpenCV 抠图项目实战#xff08;7#xff09; 本系列是 Python 小白的课题作业《基于OpenCV 的图像分割和抠图》。 需要说明的是#xff0c;本系列并不能算是 OpenCV 的抠图项目教程#xff0c;只是以此为主题的课题报告。其中包括了一个较为完整的…Python 小白的课题报告—OpenCV 抠图项目实战7 本系列是 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源程序代码 第四章 图像分割 4.1 边缘检测 边缘是指图像中两个不同区域的边界线上连续的像素点的集合是图像局部特征不连续性的反映体现了灰度、颜色、纹理等图像特性的突变。 边缘检测是图像处理和计算机视觉中的基本问题边缘检测的目的是标识数字图像中亮度变化明显的点。 边缘的灰度值呈现出阶跃型或屋顶型变化。阶跃型边缘两边像素点的灰度值存在着明显的差异而屋顶型边缘则位于灰度值上升或下降的转折处。 梯度指出了像素值的最大变化率的方向使用微分算子可以进行边缘检测 恒定灰度区域一阶导数为零二阶导数为零灰度台阶或斜坡起点区域一阶导数非零二阶导数非零灰度斜坡区域一阶导数非零二阶导数为零。 一阶导数、二阶导数的有限差分公式为 ∂f/∂xf(x1)−f(x)(∂2f)/(∂x2)f(x1)−2f(x)f(x−1)∂f/∂xf(x1)-f(x)\\ (∂^2 f)/(∂x^2 )f(x1)-2f(x)f(x-1) ∂f/∂xf(x1)−f(x)(∂2f)/(∂x2)f(x1)−2f(x)f(x−1) 图像梯度提取方法简单直接能够有效的描述图像的原始状态因此发展出多种图像梯度算子常用的有Laplacian、Soble和Canny算子。 1. 拉普拉斯算子Laplacian 最简单的各向同性导数算子卷积核是拉普拉斯算子Laplacian。 Laplace 是导数算子会突出图像中的急剧灰度变化抑制灰度缓慢变化区域往往会产生暗色背景下的灰色边缘和不连续图像。将拉普拉斯图像与原图叠加可以得到保留锐化效果的图像。 拉普拉斯卷积核很容易通过卷积操作 cv. filter_2d 实现OpenCV 也提供了拉普拉斯算子 cv.Laplacian 来实现。 函数说明 cv.Laplacian(src, ddepth[, dst[, ksize[, scale[, delta[, borderType]]]]]) → dst参数说明 src输入图像可以是灰度图像也可以是多通道的彩色图像ddepth输出图片的数据深度dst输出图像大小和类型与 src 相同ksize计算二阶导数滤波器的孔径大小必须为正奇数可选项scale缩放比例因子可选项默认值为 1delta输出图像的偏移量可选项默认值为 0borderType边界扩充的类型注意不支持对侧填充BORDER_WRAP 使用Laplacian算子进行边缘检测的基本程序如下 # MattingLaplacian.py # edge detection by Laplacian # Copyright 2021 youcans, XUPT # Crated2021-12-10import cv2 as cv from matplotlib.figure import Figureimg cv2.imread(../images/Fig0338a.tif, flags0) # NASA 月球影像图# 使用 cv2.Laplacian 实现 Laplace 卷积算子 imgLaplace2 cv2.Laplacian(img, -1, ksize3) imgRecovery cv2.add(img, imgLaplace2) # 恢复原图像# 二值化边缘图再卷积 ret, binary cv2.threshold(img, 0, 255, cv2.THRESH_BINARY | cv2.THRESH_TRIANGLE) imgLaplace3 cv2.Laplacian(binary, cv2.CV_64F) imgLaplace3 cv2.convertScaleAbs(imgLaplace3)plt.figure(figsize(9, 6)) plt.subplot(131), plt.axis(off), plt.title(Original) plt.imshow(img, cmapgray, vmin0, vmax255) plt.subplot(132), plt.axis(off), plt.title(cv.Laplacian) plt.imshow(imgLaplace2, cmapgray, vmin0, vmax255) plt.subplot(133), plt.axis(off), plt.title(thresh-Laplacian) plt.imshow(imgLaplace3, cmapgray, vmin0, vmax255) plt.tight_layout() plt.show() 使用Laplacian算子进行边缘检测的结果如下图所示。 图4.1 Laplacian算子进行边缘检测 2. 索贝尔梯度算子Sobel Sobel 算子是一种离散的微分算子是高斯平滑和微分求导的联合运算抗噪声能力强。 Sobel 梯度算子利用局部差分寻找边缘计算得到梯度的近似值。先计算水平、垂直方向的梯度再求总梯度。编程实现时可以用绝对值近似平方根。 OpenCV 也提供了函数 cv.Sobel() 实现 Sobel 梯度算子。 函数说明 cv.Sobel(src, ddepth, dx, dy[, dst[, ksize[, scale[, delta[, borderType]]]]]) → dst参数说明 src输入图像灰度图像不适用彩色图像dst输出图像大小和类型与 src 相同ddepth输出图片的数据深度由输入图像的深度进行选择dxx 轴方向导数的阶数1 或 2dyy 轴方向导数的阶数1 或 2ksizeSobel算子卷积核的大小scale缩放比例因子可选项默认值为 1delta输出图像的偏移量可选项默认值为 0 使用Sobel算子进行边缘检测的基本程序如下 # MattingSobel.py # edge detection by Sobel # Copyright 2021 youcans, XUPT # Crated2021-12-10import cv2 as cv from matplotlib.figure import Figureimg cv2.imread(../images/imgGaia.tif, flags0)# 使用函数 filter2D 实现 Sobel 算子 kernSobelX np.array([[-1, 0, 1], [-2, 0, 2], [-1, 0, 1]]) # SobelX kernel kernSobelY np.array([[-1, -2, -1], [0, 0, 0], [1, 2, 1]]) # SobelY kernel imgSobelX cv2.filter2D(img, -1, kernSobelX, borderTypecv2.BORDER_REFLECT) imgSobelY cv2.filter2D(img, -1, kernSobelY, borderTypecv2.BORDER_REFLECT)# 使用 cv2.Sobel 实现 Sobel 算子 SobelX cv2.Sobel(img, cv2.CV_16S, 1, 0) # 计算 x 轴方向 SobelY cv2.Sobel(img, cv2.CV_16S, 0, 1) # 计算 y 轴方向 absX cv2.convertScaleAbs(SobelX) # 转回 uint8 absY cv2.convertScaleAbs(SobelY) # 转回 uint8 SobelXY cv2.addWeighted(absX, 0.5, absY, 0.5, 0) # 用绝对值近似平方根plt.figure(figsize(10, 6)) plt.subplot(141), plt.axis(off), plt.title(Original) plt.imshow(img, cmapgray, vmin0, vmax255) plt.subplot(142), plt.axis(off), plt.title(SobelX) plt.imshow(SobelX, cmapgray, vmin0, vmax255) plt.subplot(143), plt.axis(off), plt.title(SobelY) plt.imshow(SobelY, cmapgray, vmin0, vmax255) plt.subplot(144), plt.axis(off), plt.title(SobelXY) plt.imshow(SobelXY, cmapgray) plt.tight_layout() plt.show()使用Sobel算子进行边缘检测的结果如下图所示。 图4.2 Sobel算子进行边缘检测 3. Canny 边缘检测 Canny边缘检测是由Jhon F.Canny提出的算法具有低错误率、定位良好、最小响应的特点。 Canny算子在过滤噪声、计算梯度的同时实现非最大值抑制不容易受噪声的干扰。采用双阈值法可以分别检测到强边缘和弱边缘并且仅当弱边缘与强边缘相连时才将弱边缘包含在输出结果中这就保障了检测到真正的弱边缘。 Canny算法的工作原理为 1使用高斯滤波器对图像进行平滑去噪 2计算输入图像梯度 3在边缘上使用非极大值抑制NMS进行过滤 4在检测到的边缘上使用双阈值法去除假阳性 5分析所有的边缘及其连接以保留真正的边缘并消除不明显的边缘 OpenCV 也提供了函数 cv.Sobel() 实现 Sobel 梯度算子。 函数说明 cv.Canny(image, threshold1, threshold2[, edges[, apertureSize[, L2gradient]]]) → edges参数说明 image输入图像灰度图像不适用彩色图像edges输出图像单通道 8bit图像大小与images相同threshold1滞后过程的较小阈值用于边缘连接threshold2滞后过程的较大阈值用于查找明显的边缘apertureSizeSobel算子的卷积核大小L2gradient标志使用 L1范数或 L2范数正则化 使用 Canny()进行边缘检测的基本程序如下 # MattingCanny.py # edge detection by Cann # Copyright 2021 youcans, XUPTy # Crated2021-12-10import cv2 as cv from matplotlib.figure import FigureimgOri cv2.imread(../images/imgGaia.tif, flags0)# canny(): 边缘检测 imgBlur cv2.GaussianBlur(imgOri, (3, 3), 0) imgCanny cv2.Canny(imgBlur, 50, 150)# 形态学边缘检测 _, imgThr cv2.threshold(imgOri, 200, 255, cv2.THRESH_BINARY) # 固定阈值二值化 kernel cv2.getStructuringElement(cv2.MORPH_RECT, (5, 5)) # 定义矩形结构元素 gradient cv2.morphologyEx(Thr_img, cv2.MORPH_GRADIENT, kernel) # 梯度plt.figure(figsize(9, 6)) plt.subplot(221), plt.axis(off), plt.title(Original) plt.imshow(imgOri, cmapgray, vmin0, vmax255) plt.subplot(222), plt.axis(off), plt.title(GaussianBlur) plt.imshow(imgBlur, cmapgray, vmin0, vmax255) plt.subplot(223), plt.axis(off), plt.title(Canny detection) plt.imshow(imgCanny, cmapgray, vmin0, vmax255) plt.subplot(224), plt.axis(off), plt.title(Gradient detection) plt.imshow(gradient, cmapgray) plt.tight_layout() plt.show()使用Canny算子进行边缘检测的结果如下图所示。 图4.3 Canny 算子进行边缘检测 【本节完】 版权声明 欢迎关注『Python 小白的项目实战 youcans』 原创作品 原创作品转载必须标注原文链接https://blog.csdn.net/youcans/article/details/122296231 Copyright 2022 youcans, XUPT Crated2022-01-05 欢迎关注『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源程序代码
http://www.hn-smt.com/news/37694/

相关文章:

  • 11.13 NOTE
  • 10.26 NOTE
  • 题解:CF2106D Flower Boy
  • 2025年智能仓储服务商综合实力TOP5榜单:引领物流效率革命,覆盖山东、河北、江浙沪等国内线路,服务中亚五国、俄罗斯、阿富汗等国际路线
  • 在ec2上部署CosyVoice2模型
  • 前后端全栈技术栈深度剖析:从Vue到Node.js的完整学习路径
  • 11月113日日记
  • 【AI翻译】分布式系统中的心跳机制
  • 2025.11.13总结
  • 智能眼镜论文笔记
  • LeetCode 面试经典 150_栈_简化路径(53_71_C++_中等)(栈+stringstream) - 实践
  • 污染控制化学及工程知识点整理
  • 400万美元ARR,小企业和个人AI客服Beside融资3200万美元;KalpaLabs:不到1000美元训练语音模型丨日报
  • [CSP-S 2025] 道路修复 road
  • 【A】Shinichi Kudo
  • appium包含文本定位的5种方法
  • Docker部署Code-Server,实现远程写代码
  • 软件工程学习日志2025.11.13
  • 2025-11-13 PQ v.Next日志记录
  • IOS抓包------Stream
  • C++之变量与基本类型(三) - Invinc
  • (八大排序)快速排序(递归)
  • (八大排序)冒泡排序
  • 11.13 比赛总结
  • Python迭代器_迭代器对象可迭代对象必须分开场景
  • 为啥要搞utf-8等,直接存储Unicode码点不行吗?
  • 2025年安徽商标注册公司Top5排行榜:专业机构深度解析
  • 2025年比较好的非标设备机架产品推荐排行榜单,非标设备机架公司精选实力品牌榜单发布
  • 2025年北京继承官司律师机构推荐,这些律所值得信赖,北京丰台继承律师/北京离婚纠纷/离婚纠纷律师/遗产继承律师事务所维权机构选哪家
  • 2025钢结构反吊膜十大供应商排行榜,膜结构车棚厂家,膜结构看台厂家,有实力的膜结构自行车棚供应厂家排行,哪家好怎么选