median = cv2.medianBlur(img, 5)
时间: 2024-06-05 10:10:28 浏览: 181
这段代码使用了 OpenCV 库中的中值滤波函数 `medianBlur()` 对图像 `img` 进行滤波处理,滤波器大小为 5x5。中值滤波是一种非线性滤波方法,它用每个像素周围指定大小的邻域内像素的中值来代替该像素的值,从而达到平滑图像的目的。与其他线性滤波方法相比,中值滤波对于去除椒盐噪声等离群点有很好的效果。
相关问题
def Process(img): # 高斯平滑 gaussian = cv2.GaussianBlur(img, (3, 3), 0, 0, cv2.BORDER_DEFAULT)#高斯模糊函数 median = cv2.medianBlur(gaussian, 5)#中值滤波 sobel = cv2.Sobel(median, cv2.CV_8U, 1, 0, ksize=3)#Sobel算子,梯度方向是X # 二值化 ret, binary = cv2.threshold(sobel,200, 255, cv2.THRESH_BINARY)#cv2简单阙值函数 # 核函数 element1 = cv2.getStructuringElement(cv2.MORPH_RECT, (9, 1))#得到一个结构元素(卷积核)。主要用于后续的腐蚀、膨胀等运算。 element2 = cv2.getStructuringElement(cv2.MORPH_RECT, (9, 7)) dilation = cv2.dilate(binary, element2, iterations=1)#膨胀函数 # 腐蚀 erosion = cv2.erode(dilation, element1, iterations=1) # 膨胀 dilation2 = cv2.dilate(erosion, element2, iterations=3) return dilation2 def GetRegion(img): regions = [] # 查找轮廓 contours, hierarchy = cv2.findContours(img, cv2.RETR_TREE, cv2.CHAIN_APPROX_SIMPLE)#检测图像中物体轮廓 for contour in contours: area = cv2.contourArea(contour)#计算轮廓面积 if (area<2000): continue eps = 0.001* cv2.arcLength(contour, True)#计算封闭轮廓或者曲线的长度 approx = cv2.approxPolyDP(contour, eps, True)#轮廓多边形逼近 rect = cv2.minAreaRect(contour)#求最小面积矩形框 box = cv2.boxPoints(rect)#获取最小面积矩形框的四个顶点坐标 box = np.int0(box)#整型化 height = abs(box[0][1] - box[2][1]) width = abs(box[0][0] - box[2][0]) ratio =float(width) / float(height) if (ratio < 5 and ratio > 1.8): regions.append(box) return regions def detect(img): gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)#图片灰度化 prc = Process(gray) regions = GetRegion(prc) print('[INFO]:Detect %d license plates' % len(regions)) for box in regions: cv2.drawContours(img, [box], 0, (0, 0,255), 2) cv2.imwrite(r'C:\Users\86182\Pictures\Saved Pictures\test.png', img) cv2.waitKey(0) cv2.destroyAllWindows()
这是一段基于OpenCV库的车牌检测代码。具体来说,它通过对车牌图像进行高斯平滑、中值滤波、Sobel算子、二值化、膨胀、腐蚀等操作,得到一幅处理后的图像。然后,它通过查找图像中的轮廓,计算轮廓面积、多边形逼近、最小面积矩形框等方式,识别出车牌并用红色框标记出来。该代码还可以输出识别到的车牌数量,并将标记后的图像保存在本地。
逐行解释下列代码 :import cv2 import numpy as np import matplotlib.pyplot as plt def mean_filter(img,kernel_size=9): """ 均值滤波 """ img_mean = cv2.blur(img,ksize=(kernel_size,kernel_size)) return img_mean def median_filter(img,kernel_size=9): """ 中值滤波 """ img_median = cv2.medianBlur(img,ksize=(kernel_size,kernel_size)) return img_median def median_filter(img,kernel_size=9,sigma=0): """ 高斯滤波 """ sigma_x = sigma sigma_y = sigma img_gau = cv2.GaussianBlur(img,(kernel_size,kernel_size),sigma_x,sigma_y) return img_gau img_path = "input.jpg" # 你应该更改此处更改你使用的图像的路径 img = cv2.imread(img_path)# .astype(np.float32) img = cv2.cvtColor(img, cv2.COLOR_BGR2RGB) # 该变图像的格式 BGR->RGB height, width, channel = img.shape # 记录图像的大小 plt.figure(dpi=200) plt.subplot(141), plt.imshow(img), plt.title('Original Photo'),plt.xticks([]),plt.yticks([]) # 展示原始图像的样子 img_mean = mean_filter(img) plt.subplot(142), plt.imshow(img_mean), plt.title('mean filter'),plt.xticks([]),plt.yticks([]) # 展示原始图像的样子 img_medi = median_filter(img) plt.subplot(143), plt.imshow(img_medi), plt.title('median filter'),plt.xticks([]),plt.yticks([]) # 展示原始图像的样子 img_gau = median_filter(img) plt.subplot(144), plt.imshow(img_gau), plt.title('Gau filter'),plt.xticks([]),plt.yticks([]) # 展示原始图像的样子 plt.savefig('result.jpg')
这段代码是用来实现图像处理中的几种滤波方法。通过导入cv2、numpy和matplotlib.pyplot三个库,在函数中分别调用了均值滤波、中值滤波和高斯滤波来处理图像。其中均值滤波和中值滤波都可以通过cv2库中的blur和medianBlur函数来实现,高斯滤波则是通过cv2库中的GaussianBlur函数来实现。在这三个函数中,都可以设置滤波核的大小和sigma值。最后,通过导入的plt库来将处理后的图像绘制出来,从而实现图像的滤波处理。而最后一行img_path = "input.jpg"则是定义了处理的图像的路径。
阅读全文