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

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中的数学形态学函数来处理图像。根据具体的应用需求,可以灵活运用这些函数来实现复杂的图像形态变换和处理任务。

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • prompt第四讲-fewshot
  • ES6 Class 的继承(十一)
  • 《Linux系统编程篇》vim的使用 ——基础篇
  • 论文复现丨物流中心选址问题:蜘蛛猴算法求解
  • 摄像头 RN6752v1 视频采集卡
  • 【机器学习】Scoring Model Scores: 理解、设计与优化评分模型
  • OpenWrt安装快速入门指南
  • JS之在函数中返回匿名函数的用法
  • tessy 集成测试:小白入门指导手册
  • Ubuntu 编译和运行ZLMediaKit
  • samba服务、安装-smbpasswd工具、pdbedit工具、testparm工具
  • c语言唯一一个三目运算符
  • Qt MV架构 数据-窗口映射器
  • java死锁检测
  • 【Harmony】SCU暑期实训鸿蒙开发学习日记Day1
  • CSS中外联样式表代表的含义
  • Git的一些常用操作
  • java B2B2C 源码多租户电子商城系统-Kafka基本使用介绍
  • js中forEach回调同异步问题
  • leetcode讲解--894. All Possible Full Binary Trees
  • magento2项目上线注意事项
  • niucms就是以城市为分割单位,在上面 小区/乡村/同城论坛+58+团购
  • PHP CLI应用的调试原理
  • PHP变量
  • weex踩坑之旅第一弹 ~ 搭建具有入口文件的weex脚手架
  • 给自己的博客网站加上酷炫的初音未来音乐游戏?
  • 京东美团研发面经
  • 判断客户端类型,Android,iOS,PC
  • 前端面试总结(at, md)
  • 想写好前端,先练好内功
  • 学习使用ExpressJS 4.0中的新Router
  • k8s使用glusterfs实现动态持久化存储
  • # Redis 入门到精通(一)数据类型(4)
  • # 再次尝试 连接失败_无线WiFi无法连接到网络怎么办【解决方法】
  • #ifdef 的技巧用法
  • ( 用例图)定义了系统的功能需求,它是从系统的外部看系统功能,并不描述系统内部对功能的具体实现
  • ()、[]、{}、(())、[[]]命令替换
  • (1)(1.11) SiK Radio v2(一)
  • (2021|NIPS,扩散,无条件分数估计,条件分数估计)无分类器引导扩散
  • (2022版)一套教程搞定k8s安装到实战 | RBAC
  • (4)Elastix图像配准:3D图像
  • (Redis使用系列) Springboot 使用redis的List数据结构实现简单的排队功能场景 九
  • (二)丶RabbitMQ的六大核心
  • (附源码)springboot 智能停车场系统 毕业设计065415
  • (黑马C++)L06 重载与继承
  • (论文阅读11/100)Fast R-CNN
  • (四) Graphivz 颜色选择
  • (算法二)滑动窗口
  • (淘宝无限适配)手机端rem布局详解(转载非原创)
  • (一)u-boot-nand.bin的下载
  • (转)scrum常见工具列表
  • .gitignore文件---让git自动忽略指定文件
  • .NET Core IdentityServer4实战-开篇介绍与规划
  • .NET Framework Client Profile - a Subset of the .NET Framework Redistribution
  • .net 按比例显示图片的缩略图