opencv—常用函数学习_“干货“_4

目录

十二、图像平滑滤波

均值滤波 (blur)

方框滤波 (boxFilter)

中值滤波 (medianBlur)

高斯滤波 (GaussianBlur)

双边滤波 (bilateralFilter)

自定义滤波器 (filter2D)

边缘保留滤波 (edgePreservingFilter)

快速非局部均值去噪 (fastNlMeansDenoising)

彩色图像的快速非局部均值去噪 (fastNlMeansDenoisingColored)

获取高斯核 (getGaussianKernel)

十三、锐化与边缘检测

Sobel算子 (Sobel)

Scharr算子 (Scharr)

Laplacian算子 (Laplacian)

Canny边缘检测器 (Canny)

获取Gabor核 (getGaborKernel)

笛卡尔坐标与极坐标转换 (cartToPolar 和 polarToCart)

十四、数学形态学

获取结构元素 (getStructuringElement)

膨胀操作 (dilate)

腐蚀操作 (erode)

高级形态学变换 (morphologyEx)

http://t.csdnimg.cn/i8pqt —— opencv—常用函数学习_“干货“_总(VIP)

散的正在一部分一部分发,不需要VIP。

资料整理不易,有用话给个赞和收藏吧。


十二、图像平滑滤波

        在OpenCV中,图像平滑滤波(或称为图像去噪)是一种非常常见的操作,通常用于去除图像中的噪声,使图像变得更加平滑。OpenCV提供了多种滤波函数,下面介绍这些滤波函数及其使用示例。

图像平滑滤波函数
blurboxFiltersqBoxFiltermedianBlurGaussianBlur
均值滤波方框滤波平方方框滤波中值滤波高斯滤波
bilateralFilterfilter2DsepFilter2DedgePreservingFilterfastNlMeansDenoising
双边滤波自定义滤波器分离滤波器边缘保留滤波快速非局部均值去噪
fastNlMeansDenoisingColoredtextureFlatteninggetGaussianKernel
彩色图像的快速非局部均值去噪纹理平滑获取高斯核
均值滤波 (blur)
import cv2
import numpy as np# 读取图像
image = cv2.imread('path_to_image.jpg')# 均值滤波
blurred_image = cv2.blur(image, (5, 5))
cv2.imshow('Blurred Image', blurred_image)
cv2.waitKey(0)
cv2.destroyAllWindows()
方框滤波 (boxFilter)
# 方框滤波
box_filtered_image = cv2.boxFilter(image, -1, (5, 5))
cv2.imshow('Box Filtered Image', box_filtered_image)
cv2.waitKey(0)
cv2.destroyAllWindows()
中值滤波 (medianBlur)
# 中值滤波
median_blurred_image = cv2.medianBlur(image, 5)
cv2.imshow('Median Blurred Image', median_blurred_image)
cv2.waitKey(0)
cv2.destroyAllWindows()
高斯滤波 (GaussianBlur)
# 高斯滤波
gaussian_blurred_image = cv2.GaussianBlur(image, (5, 5), 0)
cv2.imshow('Gaussian Blurred Image', gaussian_blurred_image)
cv2.waitKey(0)
cv2.destroyAllWindows()
双边滤波 (bilateralFilter)
# 双边滤波
bilateral_filtered_image = cv2.bilateralFilter(image, 9, 75, 75)
cv2.imshow('Bilateral Filtered Image', bilateral_filtered_image)
cv2.waitKey(0)
cv2.destroyAllWindows()
自定义滤波器 (filter2D)
# 自定义滤波器
kernel = np.array([[0, -1, 0], [-1, 5, -1], [0, -1, 0]])
custom_filtered_image = cv2.filter2D(image, -1, kernel)
cv2.imshow('Custom Filtered Image', custom_filtered_image)
cv2.waitKey(0)
cv2.destroyAllWindows()
边缘保留滤波 (edgePreservingFilter)
# 边缘保留滤波
edge_preserved_image = cv2.edgePreservingFilter(image, flags=1, sigma_s=60, sigma_r=0.4)
cv2.imshow('Edge Preserved Image', edge_preserved_image)
cv2.waitKey(0)
cv2.destroyAllWindows()
快速非局部均值去噪 (fastNlMeansDenoising)
# 快速非局部均值去噪
denoised_image = cv2.fastNlMeansDenoising(image, None, 30, 7, 21)
cv2.imshow('Denoised Image', denoised_image)
cv2.waitKey(0)
cv2.destroyAllWindows()
彩色图像的快速非局部均值去噪 (fastNlMeansDenoisingColored)
# 彩色图像的快速非局部均值去噪
denoised_colored_image = cv2.fastNlMeansDenoisingColored(image, None, 30, 30, 7, 21)
cv2.imshow('Denoised Colored Image', denoised_colored_image)
cv2.waitKey(0)
cv2.destroyAllWindows()
获取高斯核 (getGaussianKernel)
# 获取高斯核
gaussian_kernel = cv2.getGaussianKernel(5, 1.5)
print("Gaussian Kernel:\n", gaussian_kernel)

        这些示例展示了如何使用OpenCV中的各种平滑滤波函数来处理图像。根据具体的应用需求,可以灵活运用这些函数来实现复杂的图像平滑和去噪任务。

十三、锐化与边缘检测

        在OpenCV中,锐化与边缘检测是图像处理的重要任务之一,用于检测图像中的边缘和细节。下面介绍一些常用的锐化与边缘检测函数及其使用示例。

锐化与边缘检测函数
SobelScharrLaplacianspatialGradient
Sobel算子,用于计算图像的梯度Scharr算子,Sobel算子的增强版本Laplacian算子,用于计算图像的拉普拉斯计算图像的空间梯度
CannygetGaborKernelcartToPolarpolarToCart
Canny边缘检测器获取Gabor核将笛卡尔坐标转换为极坐标将极坐标转换为笛卡尔坐标
Sobel算子 (Sobel)
import cv2
import numpy as np# 读取图像
image = cv2.imread('path_to_image.jpg', cv2.IMREAD_GRAYSCALE)# 使用Sobel算子检测边缘
sobel_x = cv2.Sobel(image, cv2.CV_64F, 1, 0, ksize=3)
sobel_y = cv2.Sobel(image, cv2.CV_64F, 0, 1, ksize=3)
sobel_combined = cv2.magnitude(sobel_x, sobel_y)cv2.imshow('Sobel X', sobel_x)
cv2.imshow('Sobel Y', sobel_y)
cv2.imshow('Sobel Combined', sobel_combined)
cv2.waitKey(0)
cv2.destroyAllWindows()
Scharr算子 (Scharr)
# 使用Scharr算子检测边缘
scharr_x = cv2.Scharr(image, cv2.CV_64F, 1, 0)
scharr_y = cv2.Scharr(image, cv2.CV_64F, 0, 1)
scharr_combined = cv2.magnitude(scharr_x, scharr_y)cv2.imshow('Scharr X', scharr_x)
cv2.imshow('Scharr Y', scharr_y)
cv2.imshow('Scharr Combined', scharr_combined)
cv2.waitKey(0)
cv2.destroyAllWindows()
Laplacian算子 (Laplacian)
# 使用Laplacian算子检测边缘
laplacian = cv2.Laplacian(image, cv2.CV_64F)
cv2.imshow('Laplacian', laplacian)
cv2.waitKey(0)
cv2.destroyAllWindows()
Canny边缘检测器 (Canny)
# 使用Canny边缘检测器
canny_edges = cv2.Canny(image, 100, 200)
cv2.imshow('Canny Edges', canny_edges)
cv2.waitKey(0)
cv2.destroyAllWindows()
获取Gabor核 (getGaborKernel)
# 获取Gabor核
gabor_kernel = cv2.getGaborKernel((21, 21), 5, np.pi/4, 10, 0.5, 0, ktype=cv2.CV_32F)
filtered_image = cv2.filter2D(image, cv2.CV_8UC3, gabor_kernel)cv2.imshow('Gabor Kernel', gabor_kernel)
cv2.imshow('Filtered Image', filtered_image)
cv2.waitKey(0)
cv2.destroyAllWindows()
笛卡尔坐标与极坐标转换 (cartToPolarpolarToCart)
# 计算图像的梯度
grad_x = cv2.Sobel(image, cv2.CV_64F, 1, 0, ksize=3)
grad_y = cv2.Sobel(image, cv2.CV_64F, 0, 1, ksize=3)# 将梯度从笛卡尔坐标转换为极坐标
magnitude, angle = cv2.cartToPolar(grad_x, grad_y)# 将梯度从极坐标转换为笛卡尔坐标
x, y = cv2.polarToCart(magnitude, angle)cv2.imshow('Magnitude', magnitude)
cv2.imshow('Angle', angle)
cv2.waitKey(0)
cv2.destroyAllWindows()

        这些示例展示了如何使用OpenCV中的各种锐化与边缘检测函数来处理图像。根据具体的应用需求,可以灵活运用这些函数来实现复杂的图像锐化和边缘检测任务。

十四、数学形态学

        在OpenCV中,数学形态学是图像处理的重要工具,用于图像的形态变换。常见的操作包括膨胀、腐蚀、开运算、闭运算等。下面介绍这些相关函数及其使用示例。

数学形态学函数
getStructuringElementdilateerodemorphologyEx
获取结构元素(核)膨胀操作腐蚀操作高级形态学变换(开运算、闭运算等)

获取结构元素 (getStructuringElement)
import cv2
import numpy as np# 获取一个3x3的矩形结构元素
kernel = cv2.getStructuringElement(cv2.MORPH_RECT, (3, 3))
print("Structuring Element:\n", kernel)
膨胀操作 (dilate)
# 读取图像
image = cv2.imread('path_to_image.jpg', cv2.IMREAD_GRAYSCALE)# 获取结构元素
kernel = cv2.getStructuringElement(cv2.MORPH_RECT, (5, 5))# 进行膨胀操作
dilated_image = cv2.dilate(image, kernel)
cv2.imshow('Dilated Image', dilated_image)
cv2.waitKey(0)
cv2.destroyAllWindows()
腐蚀操作 (erode)
# 进行腐蚀操作
eroded_image = cv2.erode(image, kernel)
cv2.imshow('Eroded Image', eroded_image)
cv2.waitKey(0)
cv2.destroyAllWindows()
高级形态学变换 (morphologyEx)
# 开运算(先腐蚀后膨胀)
opened_image = cv2.morphologyEx(image, cv2.MORPH_OPEN, kernel)
cv2.imshow('Opened Image', opened_image)
cv2.waitKey(0)
cv2.destroyAllWindows()# 闭运算(先膨胀后腐蚀)
closed_image = cv2.morphologyEx(image, cv2.MORPH_CLOSE, kernel)
cv2.imshow('Closed Image', closed_image)
cv2.waitKey(0)
cv2.destroyAllWindows()# 梯度运算(膨胀减去腐蚀)
gradient_image = cv2.morphologyEx(image, cv2.MORPH_GRADIENT, kernel)
cv2.imshow('Gradient Image', gradient_image)
cv2.waitKey(0)
cv2.destroyAllWindows()# 顶帽运算(原图像减去开运算)
tophat_image = cv2.morphologyEx(image, cv2.MORPH_TOPHAT, kernel)
cv2.imshow('Top Hat Image', tophat_image)
cv2.waitKey(0)
cv2.destroyAllWindows()# 黑帽运算(闭运算减去原图像)
blackhat_image = cv2.morphologyEx(image, cv2.MORPH_BLACKHAT, kernel)
cv2.imshow('Black Hat Image', blackhat_image)
cv2.waitKey(0)
cv2.destroyAllWindows()

        这些示例展示了如何使用OpenCV中的数学形态学函数来处理图像。根据具体的应用需求,可以灵活运用这些函数来实现复杂的图像形态变换和处理任务。

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

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

相关文章

Canvas API

Canvas API中文文档: canvas API中文网 - Canvas API中文文档首页地图 Web 开发技术: Canvas API - Web API | MDN (mozilla.org) HTML5 Canvas: The HTML5 Canvas Handbook (bucephalus.org)

前端内容之常用置标

最近由于换了项目组,目前负责需求全部是前端任务,为了方便后续查看,在此记录下! 拓尔思常用置标 获取指定栏目的指定字段(数据库字段)的栏目信息 获取一级栏目的栏目名称 autolink为true,代表产生链接;false为不产生链接。 &l…

AI 绘画|Midjourney设计Logo提示词

你是否已经看过许多别人分享的 MJ 咒语,却仍无法按照自己的想法画图?通过学习 MJ 的提示词逻辑后,你将能够更好地理解并创作自己的“咒语”。本文将详细拆解使用 MJ 设计 Logo 的逻辑,让你在阅读后即可轻松上手,制作出…

R语言学习笔记8-并行计算

R语言学习笔记8-并行计算 简要说明使用parallel包使用foreach和doParallel包使用future包 简要说明 在R语言中,通过并行计算可以显著提升处理大数据集或执行耗时任务的效率。R提供了多种并行计算的方法,包括使用基础的parallel包和更高级的foreach和fut…

打包一个自己的Vivado IP核

写在前面 模块复用是逻辑设计人员必须掌握的一个基本功,通过将成熟模块打包成IP核,可实现重复利用,避免重复造轮子,大幅提高我们的开发效率。 接下来将之前设计的串口接收模块和串口发送模块打包成IP核,再分别调用…

知识加油站

我的🍑宝店【码猿小铺】持续进行,其中有Linux/shell视频(包含项目实操)、新版ShardingJDBC分库分表视频(包含项目实操)、初中高级面试专栏、React全套视频(包含项目实操)、新版javes…

【深度学习】FaceChain-SuDe,免训练,AI换脸

https://arxiv.org/abs/2403.06775 FaceChain-SuDe: Building Derived Class to Inherit Category Attributes for One-shot Subject-Driven Generation 摘要 最近,基于主体驱动的生成技术由于其个性化文本到图像生成的能力,受到了广泛关注。典型的研…

从MySQL迁移到PostgreSQL的完整指南

1.引言 在现代数据库管理中,选择合适的数据库系统对业务的成功至关重要。随着企业数据量的增长和对性能要求的提高,许多公司开始考虑从MySQL迁移到PostgreSQL。这一迁移的主要原因包括以下几个方面: 1.1 性能和扩展性 PostgreSQL以其高性能…

TCP/IP、UDP、HTTP 协议介绍比较和总结

TCP/IP、UDP、HTTP是网络通信中的三种重要协议,各自具有不同的特点和应用场景。以下是对这三种协议的详细介绍、比较和总结。 TCP/IP协议 传输控制协议/互联网协议(TCP/IP, Transmission Control Protocol/Internet Protocol) 特点: 可靠性:TCP提供可靠的通信,通过握手…

深度学习入门——神经网络

前言 神经网络可以帮助自动化设定权重 具体地讲,神经网络的一个重要性质是它可以自动地从数据中学习到合适的权重参数 从感知机到神经网络 神经网络的例子 中间层aka隐藏层 复习感知机 偏置b 并没有被画出来。如果要明确地表示出b,可以像图3-3那样做…

搜维尔科技:使用远程TCP和刀具路径遥操作点胶

使用远程TCP和刀具路径遥操作点胶 搜维尔科技:使用远程TCP和刀具路径遥操作点胶

Large Language Model系列之一:语言模型与表征学习(Language Models and Representation Learning)

语言模型与表征学习(Language Models and Representation Learning) 1 语言模型 N-Gram模型 from collections import defaultdictsentences [The swift fox jumps over the lazy dog.,The swift river flows under the ancient bridge.,The swift br…

华为1000人校园实验记录

在这里插入代码片1000人校园区网设计 1、配置Eth-trunk实现链路冗余 vlan 900 管理WLAN #接入SW8 操作:sys undo in en sysname JR-SW8 int Eth-Trunk 1 mode lacp-static trunkport g0/0/1 0/0/2 port link-type trunk port trunk allow-pass vlan 200 900 qu vla…

Linux C++ 056-设计模式之迭代器模式

Linux C 056-设计模式之迭代器模式 本节关键字:Linux、C、设计模式、迭代器模式 相关库函数: 概念 迭代器模式(Iterator Pattern)是一种常用的设计模式。迭代器模式提供一种方法顺序访问一个聚合对象中的各个元素,而…

模拟器小程序/APP抓包(Reqable+MUMU模拟器)

一、使用adb连接上MUMU模拟器 打开多开器点击ADB图标 连接模拟器端口: adb connect 127.0.0.1:16384列出已连接的设备: adb devices正常会显示MuMu的设备已连接 二、下载Reqable 1.下载链接:客户端下载 | Reqable 2.文档链接:…

Bigdata-Docker构建大数据学习开发环境

Bigdata-Docker构建大数据学习开发环境 介绍 1、镜像环境 系统:centos 7Java :java7Zookeeper: 3.4.6Hadoop: 2.7.1mysql: 5.6.29Hive: 1.2.1Spark: 1.6.2Hbase: 1.1.2 2、镜像介绍 tonywell/centos-java:openssh、java7,基础…

示例:在WPF ListBox中,ScrollViewer.CanContentScroll=“False“破坏虚拟化如何解决

一、目的:分享一个解决ListBox设置了ScrollViewer.CanContentScroll"False"破坏虚拟坏的解决方法 ScrollViewer.CanContentScroll 是 WPF 中 ScrollViewer 控件的一个属性,它决定了滚动内容时是按逻辑单位(如项)还是按物…

redis基本类型和订阅

redis-cli -h <host> -p <port> -a <password> 其中&#xff0c;< host>是Redis服务器的主机名或IP地址&#xff0c;< port>是Redis服务器的端口号&#xff0c;< password>是Redis服务器的密码&#xff08;如果有的话&#xff09;。 set …

在项目中,如何使用springboot+vue+springsecurity+redis缓存+Axios+MySQL数据库+mybatis

要在项目中使用springbootvuespringsecurityredis缓存AxiosMySQL数据库mybatis&#xff0c;可以按照以下步骤进行操作&#xff1a; 创建一个Spring Boot项目&#xff0c;并添加所需的依赖。在pom.xml文件中添加Spring Boot、Spring Security、Redis、MySQL和MyBatis的依赖项。 …

JAVA学习-练习试用Java实现“只出现一次的数字 II”

问题&#xff1a; 给定一个整数数组 nums &#xff0c;除某个元素仅出现 一次 外&#xff0c;其余每个元素都恰出现 三次 。请找出并返回那个只出现了一次的元素。 示例 1&#xff1a; 输入&#xff1a;nums [2,2,3,2] 输出&#xff1a;3 示例 2&#xff1a; 输入&#xf…