OpenCV这么简单为啥不学——1.1、图像处理(灰度图、模糊图片、GaussianBlur函数、提取边缘、边缘膨胀、边缘细化) ---- 目录 OpenCV这么简单为啥不学——1.1、图像处理(灰度图 、模糊图片、GaussianBlur函数、提取边缘、边缘膨胀、边缘细化) 前言 环境 灰度图 模糊图片 GaussianBlur函数 提取边缘 边缘膨胀 边缘细化 整体对照 总结 ---- 前言 计算机视觉市场巨大而且持续增长 import cv2 # 获取图片的数组 img = cv2.imread("800_600.jpg") # 模糊图 imgBlur = cv2.GaussianBlur(img, (151, 151 语法: dst=GaussianBlur(src,ksize,sigmaX [,dst [,sigmaY [,borderType]]]) 参数: src:图片 ksize:高斯内核大小。 import cv2 # 获取图片的数组 img = cv2.imread("800_600.jpg") # 模糊图 imgBlur = cv2.GaussianBlur(img, (151, 151
高斯模糊使用API GaussianBlur,高斯模糊使用加权平均法对该半径、范围进行模糊。 GaussianBlur方法原型如下: cv2.GaussianBlur( SRC,ksize,sigmaX ) 我们在当前代码中使用中可以按如下参数传递: dst=cv2.GaussianBlur(img 我们添加原图显示与高斯模糊后的效果进行对比,完整代码如下: import cv2 img = cv2.imread(r'C:\Users\mx\Desktop\111.png') dst=cv2.GaussianBlur 代码如下: dst=cv2.GaussianBlur(img,(0,0),20) ? 2.2 自己编写噪点图片 其实2.1中的噪点图片是我自己编辑而成,那自己如何编写类似的噪点图片呢? 先别急,我们直接使用高斯模糊进行降噪吧: dst=cv2.GaussianBlur(img,(5,5),0) 结果如下: ? 咦?
GaussianBlur API解析 首先看源码: void cv::GaussianBlur( InputArray _src, OutputArray _dst, Size ksize, (borderType & BORDER_ISOLATED)) src.locateROI( wsz, ofs ); CALL_HAL(gaussianBlur, cv_hal_gaussianBlur (src, dst, ksize, sigma1, sigma2, borderType)) CV_IPP_RUN_FAST(ipp_GaussianBlur(src, dst, ksize, sigma1, sigma2, borderType)); //若CPU版本的gaussianBlur仍然不能计算,则选择CPU版本的filter2D sepFilter2D(src, dst , sdepth, kx, ky, Point(-1, -1), 0, borderType); } 从上述代码的大致分析中可以知道,OpenCV的GaussianBlur本质上依然是filter2D,
图5-15 高斯滤波器空间构型 OpenCV 4提供了对图像进行高斯滤波操作的GaussianBlur()函数,该函数的函数原型在代码清单5-13中给出。 代码清单5-13 GaussianBlur()函数原型 void cv::GaussianBlur(InputArray src, OutputArray (equalLena, result_5, Size(5, 5), 10, 20); GaussianBlur(equalLena, result_9, Size(9, 9), 10, 20); GaussianBlur(equalLena_gauss, result_5gauss, Size(5, 5), 10, 20); GaussianBlur(equalLena_gauss, result _9gauss, Size(9, 9), 10, 20); GaussianBlur(equalLena_salt, result_5salt, Size(5, 5), 10, 20); GaussianBlur
img_path = "test.jpg" img=cv2.imread(img_path) gray = cv2.cvtColor(img, cv2.COLOR_RGB2GRAY) # 高斯去燥 gaussianBlur_img = cv2.GaussianBlur(gray, (5, 5), 0) # 阈值二值化分割 ret, threshold_binary = cv2.threshold(gaussianBlur_img img_path = "test.jpg" img=cv2.imread(img_path) gray = cv2.cvtColor(img, cv2.COLOR_RGB2GRAY) # 高斯去燥 gaussianBlur_img = cv2.GaussianBlur(gray, (5, 5), 0) # canny检测 cannyImg = cv2.Canny(gaussianBlur_img,50,200) #寻找轮廓 = cv2.GaussianBlur(gray, (5, 5), 0) # 拉普拉斯检测 laplace_img = cv2.Laplacian(gray, cv2.CV_16S, ksize = 3
导览 OpenCV中的二值化方法 CV::blur BoxFilter MedienBlur GaussianBlur 01 CV::blur void blur( InputArray src, 中值滤波,对所有像素进行卷积,锚点取值为周围像素的“中值” 04 GaussianBlur void GaussianBlur( InputArray src, //输入 OutputArray dst 高斯滤波,对所有像素进行卷积,锚点取值为核周围对XY两个方向的加权均值 小结 OpenCV中的二值化方法 CV::blur BoxFilter MedienBlur GaussianBlur
GaussianBlur API解析 首先看源码: void cv::GaussianBlur( InputArray _src, OutputArray _dst, Size ksize, (borderType & BORDER_ISOLATED)) src.locateROI( wsz, ofs ); CALL_HAL(gaussianBlur, cv_hal_gaussianBlur (src, dst, ksize, sigma1, sigma2, borderType)) CV_IPP_RUN_FAST(ipp_GaussianBlur(src, dst, ksize, sigma1, sigma2, borderType)); //若CPU版本的gaussianBlur仍然不能计算,则选择CPU版本的filter2D sepFilter2D(src, dst , sdepth, kx, ky, Point(-1, -1), 0, borderType); } 从上述代码的大致分析中可以知道,OpenCV的GaussianBlur本质上依然是filter2D,
(I1, mu1, Size(11, 11), 1.5); GaussianBlur(I2, mu2, Size(11, 11), 1.5); Mat mu1_2 = mu1.mul(mu1 (I1_2, sigma1_2, Size(11, 11), 1.5); sigma1_2 -= mu1_2; GaussianBlur(I2_2, sigma2_2, Size(11, 11), 1.5); sigma2_2 -= mu2_2; GaussianBlur(I1_I2, sigma12, Size(11, 11), 1.5); sigma12 -= mu1_mu2; (vI1[i], mu1, Size(11, 11), 1.5); gpu::GaussianBlur(vI2[i], mu2, Size(11, 11), 1.5); gpu::GpuMat (b.vI1[i], b.mu1, Size(11, 11), 1.5, 0, BORDER_DEFAULT, -1, stream); //gpu::GaussianBlur(b.vI2[i],
目标 模糊/平滑图片来消除图片噪声 OpenCV函数:cv2.blur(), cv2.GaussianBlur(), cv2.medianBlur(), cv2.bilateralFilter() 教程 图像是2维的,所以我们需要使用2维的高斯函数,比如OpenCV中默认的3×3的高斯卷积核(具体原理和卷积核生成方式请参考文末的番外小篇): image.png OpenCV中对应函数为cv2.GaussianBlur = cv2.imread('gaussian_noise.bmp') # 均值滤波vs高斯滤波 blur = cv2.blur(img, (5, 5)) # 均值滤波 gaussian = cv2.GaussianBlur 用cv2.bilateralFilter()函数实现: img = cv2.imread('lena.jpg') # 双边滤波vs高斯滤波 gau = cv2.GaussianBlur(img, (5, 接口文档 cv2.blur() cv2.boxFilter() cv2.GaussianBlur() cv2.getGaussianKernel() cv2.medianBlur() cv2.bilateralFilter
blur(src,ksize)展开代码语言:PythonAI代码解释blurred=cv2.blur(img,(5,5))#5x5均值核ksize:核大小(必须是正奇数,如3,5,7)3.2高斯滤波(GaussianBlur 最常用、最推荐的通用去噪方法参数少,效果稳定函数:cv2.GaussianBlur(src,ksize,sigmaX)展开代码语言:PythonAI代码解释gaussian=cv2.GaussianBlur D-->|是|E[高斯滤波cv2.GaussianBlur]D-->|否|F[均值滤波cv2.blur]C-->G[输出平滑图像]E-->GF-->G5.完整代码实战:去噪效果对比展开代码语言:PythonAI 3#垂直渐变#添加椒盐噪声noisy=add_salt_pepper_noise(img)#2.应用三种滤波blur_mean=cv2.blur(noisy,(5,5))blur_gauss=cv2.GaussianBlur images=[img,noisy,blur_mean,blur_gauss,blur_median]titles=['Original','Noisy(Salt&Pepper)','MeanBlur','GaussianBlur
image.jpg') # 进行高斯滤波 kernel_size = (5, 5) # 设置滤波器的大小 sigmaX = 0 # 设置X方向的标准差,0表示自动计算 blurred_image = cv2.GaussianBlur (image, kernel_size, sigmaX) 在上述示例中,我们使用 GaussianBlur 函数对图像进行高斯滤波。 进行高斯滤波 kernel_size = (5, 5) # 设置滤波器的大小 sigmaX = 0 # 设置X方向的标准差,0表示自动计算 gaussian_blurred_image = cv2.GaussianBlur 进行高斯滤波 kernel_size = (10, 10) # 设置滤波器的大小 sigmaX = 0 # 设置X方向的标准差,0表示自动计算 gaussian_blurred_image = cv2.GaussianBlur 你学会了使用 blur 函数进行均值滤波和使用 GaussianBlur 函数进行高斯滤波,并通过示例应用了解了去噪和图像平滑的操作。
加了高斯噪声模糊与自带函数模糊 image.png 高斯平滑函数GaussianBlur():定义:GaussianBlur(src, ksize, sigmaX, dst=None, sigmaY gaussian_noise",image) image1=cv.imread("D://2.png") cv.imshow("yuantu",image1) dst=cv.GaussianBlur
代码实现 GaussianBlur类,算法的核心部分 public final class GaussianBlur { private static final int precision = 宽度为b,高度为c * @param radius 半径 * @return 格式如同picture的数组 */ public static int[][][] GaussianBlur ”,由于扩大了10000倍,所以这个“1”实际上应该是10000 } } return matrix; } } Filter类,通过调用GaussianBlur picture[2][i][j] = (pixel & 0xff); } } picture = GaussianBlur.GaussianBlur public static void main(String[] args) throws Exception{ BufferedImage image = Filter.GaussianBlur
cv.namedWindow("input", cv.WINDOW_AUTOSIZE) cv.imshow("input", src) dst1 = cv.blur(src, (5, 5)) dst2 = cv.GaussianBlur (src, (5, 5), sigmaX=15) dst3 = cv.GaussianBlur(src, (0, 0), sigmaX=15) cv.imshow("blur ksize=5", dst1
方案一: Flutter BackdropFilter & GaussianBlur 方案二: Dart StackBlur & StackBlur 方案三: Golang GaussianBlur & GaussianBlur 方案四: Golang HashBlur & HashBlur 方案之间对比我们主要从四个方面考虑,空间占用、模糊耗时、模糊效果、同一图片是否重复计算。 方案一:BackdropFilter Flutter本身为开发者提供了绘制过滤控件BackdropFliter,我们可以使用它提供的ImageFilter#blur来实现GaussianBlur的效果。 方案二:StackBlur GaussianBlur的耗时相对来说会比较高,这里选用了效果和GaussianBlur近似,计算速度更快的StackBlur模糊算法。 方案三:服务端 GaussianBlur 模糊图片的计算逻辑由服务端处理,客户端负责将模糊的后的图片下载、展示。
高斯滤波:GaussianBlur函数: 高斯滤波 是需要对一个像素的周围的像素给予更多的重视。因此,可通过分配权重来重新计算这些周围点的值。 将每个像素替换为该像素周围像素的均值 image1 = cv2.imread('66666.png') result = cv2.blur(image1,(5,5)) gaussianResult = cv2.GaussianBlur dian_medianBlur(image): result = numpy.array(image) image = cv2.medianBlur(result,5) return image def dian_GaussianBlur (image): result = cv2.blur(image,(5,5)) gaussianResult = cv2.GaussianBlur(result,(5,5),1.5) return gaussianResult if __name__ == '__main__': img = cv2.imread('1234567.png') image = dian_GaussianBlur
可以使用OpenCV库中的cv2.GaussianBlur()函数来实现高斯滤波。 pythonCopy codeimport cv2# 读取图像image = cv2.imread('image.jpg', 0)# 高斯滤波blurred = cv2.GaussianBlur(image cv2.GaussianBlur()是OpenCV图像处理库中用于进行高斯模糊的函数之一。高斯模糊是一种常用的图像平滑技术,它可以减少图像中的噪声和细节,使图像在一定程度上变得模糊。 该函数的语法如下:pythonCopy codedst = cv2.GaussianBlur(src, ksize, sigmaX[, dst[, sigmaY[, borderType]]])参数说明 简单示例代码如下:pythonCopy codeimport cv2# 读取图像image = cv2.imread('input.jpg')# 高斯模糊blurred = cv2.GaussianBlur
Idea opencv 中 有个实现 高斯滤波 的接口,如下: cv2.GaussianBlur(src, ksize, sigmaX, dst=None, sigmaY=None, borderType ) for i in range(h): k_size = kernel_size(w, i, "vertical") gs_v[i, :, :] = cv2.GaussianBlur for j in range(w): k_size = kernel_size(j, h, "horizontal") gs_h[:, j, :] = cv2.GaussianBlur in range(w): # k_size = kernel_size(i, j, "diagonal") # gs_d[i, j, :] = cv2.GaussianBlur
Mat I2_2 = I2.mul(I2); Mat I1_2 = I1.mul(I1); Mat I1_I2 = I1.mul(I2); Mat mu1, mu2; GaussianBlur (I1, mu1, Size(11, 11), 1.5); GaussianBlur(I2, mu2, Size(11, 11), 1.5); Mat mu1_2 = mu1.mul(mu1 Mat mu2_2 = mu2.mul(mu2); Mat mu1_mu2 = mu1.mul(mu2); Mat sigma1_2, sigma2_2, sigma12; GaussianBlur (I1_2, sigma1_2, Size(11, 11), 1.5); sigma1_2 -= mu1_2; GaussianBlur(I2_2, sigma2_2, Size(11, 11), 1.5); sigma2_2 -= mu2_2; GaussianBlur(I1_I2, sigma12, Size(11, 11), 1.5); sigma12 -