目录

十二、图像平滑滤波

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

点赞(0) 打赏

评论列表 共有 0 条评论

暂无评论

微信公众账号

微信扫一扫加关注

发表
评论
返回
顶部