blur_mean = cv2.blur(img, (5, 5)) blur_box = cv2.boxFilter(img, -1, (5, 5)) blur_gaussian = cv2.GaussianBlur(img, (5, 5), 0) blur_median = cv2.medianBlur(img, 5) cv2.imshow('Mean Filter', blur_mean) cv2.imshow('Box Filter', blur_box) cv2.imshow('Gaussian Filter', blur_gaussian) cv2.imshow('Median Filter', blur_median) cv2.waitKey(0)
时间: 2024-02-16 07:01:39 浏览: 147
这是一段使用OpenCV库对图片进行平滑处理的Python代码。具体来说,它通过cv2.imread()函数读取了一张图片,然后分别使用cv2.blur()函数、cv2.boxFilter()函数、cv2.GaussianBlur()函数和cv2.medianBlur()函数对图片进行了平滑处理,生成了四个处理后的图片。这四个函数分别代表了均值滤波、方框滤波、高斯滤波和中值滤波四种平滑处理方法。最后,使用cv2.imshow()函数将这四张处理后的图片显示出来,通过cv2.waitKey(0)函数等待用户输入后关闭窗口。
相关问题
opencv python 图像处理 使用高斯滤波+cv2.adaptiveThreshold+canny算法 进行轮廓提取得到contours 在contours提取出面积不小于一定阈值threshold_area且两边接近平行于x轴、两边接近平行于y轴的矩形轮廓contour_rec 同时进行霍夫变化cv2.HoughLinesP得到直线lines 遍历lines 得到x1, y1, x2, y2 ,然后计算直线的斜率:slope = abs((y2 - y1) / (x2 - x1 + 0.001)) # 防止分母为0 通过直线的斜率筛选出相对水平与相对垂直的线:if slope > 5.5 or slope<0.17: # 如果斜率大于5.5,则认为是垂直线段 用筛选出相对水平与相对垂直的线去与对比矩形轮廓 若直线大部分与轮廓贴合 则画出该轮廓 能帮我用代码示例嘛
当然可以,以下是代码示例:
```
import cv2
import numpy as np
# 读取图像
img = cv2.imread('test.jpg')
# 灰度化
gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
# 高斯滤波
blur = cv2.GaussianBlur(gray, (5, 5), 0)
# 自适应阈值化
th = cv2.adaptiveThreshold(blur, 255, cv2.ADAPTIVE_THRESH_MEAN_C, cv2.THRESH_BINARY_INV, 11, 2)
# Canny边缘检测
edges = cv2.Canny(th, 30, 150)
# 轮廓提取
contours, hierarchy = cv2.findContours(edges, cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_SIMPLE)
# 遍历轮廓
for contour in contours:
# 计算轮廓面积
area = cv2.contourArea(contour)
# 过滤面积小于阈值的轮廓
if area < threshold_area:
continue
# 计算轮廓外接矩形
rect = cv2.minAreaRect(contour)
box = cv2.boxPoints(rect)
box = np.int0(box)
# 计算外接矩形的长宽
width = rect[1][0]
height = rect[1][1]
# 过滤长宽比例不合适的矩形
if width / height > 5 or height / width > 5:
continue
# 霍夫变换检测直线
lines = cv2.HoughLinesP(edges, 1, np.pi / 180, 50, minLineLength=50, maxLineGap=10)
# 遍历直线
for line in lines:
x1, y1, x2, y2 = line[0]
# 计算直线斜率
slope = abs((y2 - y1) / (x2 - x1 + 0.001))
# 过滤斜率不合适的直线
if slope > 5.5 or slope < 0.17:
continue
# 判断直线是否与矩形贴合
if abs(y2 - y1) > abs(x2 - x1):
# 直线接近水平,判断是否与矩形上下两条边贴合
if abs(y1 - box[0][1]) < 10 or abs(y1 - box[1][1]) < 10:
# 绘制矩形
cv2.drawContours(img, [box], 0, (0, 0, 255), 2)
break
else:
# 直线接近垂直,判断是否与矩形左右两条边贴合
if abs(x1 - box[0][0]) < 10 or abs(x1 - box[1][0]) < 10:
# 绘制矩形
cv2.drawContours(img, [box], 0, (0, 0, 255), 2)
break
# 显示结果
cv2.imshow('result', img)
cv2.waitKey(0)
cv2.destroyAllWindows()
```
这段代码中需要自己定义阈值`threshold_area`,表示过滤掉面积小于该值的轮廓。
帮我解释下面的代码import cv2 img=cv2.imread('C:/Users/Administrator/Desktop/1.jfif') img_mean = cv2.blur(img, (5, 5)) img_box = cv2.boxFilter(img, -1, (5, 5)) img_median = cv2.medianBlur(img, 5) img_gussian = cv2.GaussianBlur(img, (5, 5), 0) cv2.imshow('gs',img_gaussin) cv2.imshow('jz',img_mean) cv2.imshow('fk',img_box) cv2.imshow('zz',img_median) cv2.waitKey(0)
这段代码使用了OpenCV库对一张名为1.jfif的图像进行了四种不同类型的滤波处理,并将处理后的图像显示在窗口中。具体来说,它首先使用cv2.imread函数读取了这张图像,并将其存储为一个numpy数组img。然后,它分别使用cv2.blur、cv2.boxFilter、cv2.medianBlur和cv2.GaussianBlur四个函数对img进行了不同类型的滤波处理,生成了四个新的图像img_mean、img_box、img_median和img_gaussian。这四个函数分别对应了均值滤波、方框滤波、中值滤波和高斯滤波四种不同类型的滤波器。
最后,它使用cv2.imshow函数将这四张图像显示在不同的窗口中,并使用cv2.waitKey函数等待用户按下一个按键才关闭窗口。
阅读全文