cv2.GaussianBlur(img_src, (3, 3), 3, 3)
时间: 2024-05-27 15:09:05 浏览: 38
这行代码使用了OpenCV库中的高斯模糊函数 GaussianBlur,对输入的图像进行了模糊处理。具体来说,它采用了高斯分布函数来计算每个像素周围的加权平均值,以消除噪声和细节。其中,第一个参数 img_src 是输入的图像,第二个参数 (3, 3) 是指定的卷积核大小,这里是一个 3x3 的矩阵;第三个参数 3 是标准差,用于控制高斯核的形状,值越大则模糊程度越大;第四个参数 3 是边缘处理方式,这里使用了默认值 BORDER_DEFAULT,表示使用图像边缘的像素值进行填充。
相关问题
filelist = os.listdir(path) # 读取文件夹下的所有文件 print(filelist) for item in filelist: if item.endswith('.avi'): # 根据自己的视频文件后缀来写,我的视频文件是mp4格式 print(item) try: src = os.path.join(path, item) vid_cap = cv2.VideoCapture(src) # 传入视频的路径 while True: ret, frame = cap.read() # 读取视频帧 if not ret: break # a = cv2.imread(file_root + '/' + img_name, 0) r = cv2.GaussianBlur(frame, (5, 5), 0, 0) # 高斯滤波 t, rst = cv2.threshold(r, 180, 255, cv2.THRESH_BINARY) # 二值化 k = np.ones((3, 3), np.uint8) # 形态学操作——开运算 opening = cv2.morphologyEx(rst, cv2.MORPH_OPEN, k) contours, hierarchy = cv2.findContours(opening, cv2.RETR_LIST, cv2.CHAIN_APPROX_SIMPLE) n = len(contours) # 熔池轮廓,和个别飞溅的轮廓 n=轮廓的数量 one_pic_list = [] for i in range(n): contour_area = cv2.contourArea(contours[i]) one_pic_list.append(contour_area) max_contours = max(one_pic_list) contours_list.append(max_contours) print(len(contours_list)) # 熔池轮廓的个数 mat_file_path = os.path.join(save_path, item.split(".")[0]) sio.savemat( mat_file_path, {'data': contours_list})
这段代码中,第7行缩进不正确,导致代码会报错。正确的缩进应该是:
```
for item in filelist:
if item.endswith('.avi'): # 根据自己的视频文件后缀来写,我的视频文件是mp4格式
print(item)
try:
src = os.path.join(path, item)
vid_cap = cv2.VideoCapture(src) # 传入视频的路径
while True:
ret, frame = cap.read() # 读取视频帧
if not ret:
break
r = cv2.GaussianBlur(frame, (5, 5), 0, 0) # 高斯滤波
t, rst = cv2.threshold(r, 180, 255, cv2.THRESH_BINARY) # 二值化
k = np.ones((3, 3), np.uint8) # 形态学操作——开运算
opening = cv2.morphologyEx(rst, cv2.MORPH_OPEN, k)
contours, hierarchy = cv2.findContours(opening, cv2.RETR_LIST, cv2.CHAIN_APPROX_SIMPLE)
n = len(contours) # 熔池轮廓,和个别飞溅的轮廓 n=轮廓的数量
one_pic_list = []
for i in range(n):
contour_area = cv2.contourArea(contours[i])
one_pic_list.append(contour_area)
max_contours = max(one_pic_list)
contours_list.append(max_contours)
print(len(contours_list)) # 熔池轮廓的个数
mat_file_path = os.path.join(save_path, item.split(".")[0])
sio.savemat(mat_file_path, {'data': contours_list})
```
此外,您需要确保已经导入了与代码相关的所有模块,例如 `os`,`cv2` 和 `numpy`。
import cv2 import numpy as np # 读取图像 img = cv2.imread('123.jpg') new_size=(600,700) img=cv2.resize(img,new_size) # 灰度化处理 gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY) # 高斯模糊 Gaussian = cv2.GaussianBlur(gray,(9,9),2) cv2.imwrite('gaosi.jpg',Gaussian) # 边缘检测 edges = cv2.Canny(Gaussian, 100, 200) cv2.imwrite('bianyuan.jpg',edges) # 轮廓检测 contours, hierarchy = cv2.findContours(edges, cv2.RETR_TREE, cv2.CHAIN_APPROX_SIMPLE) # 找到最大轮廓 max_area = 0 max_contour = None for contour in contours: area = cv2.contourArea(contour) if area > max_area: max_area = area max_contour = contour # 计算矩形边界框 rect = cv2.minAreaRect(max_contour) box = cv2.boxPoints(rect) box = np.int0(box) # 计算变换矩阵 width = int(rect[1][0]) height = int(rect[1][1]) src_pts = box.astype("float32") dst_pts = np.array([[0, height-1], [0, 0], [width-1, 0], [width-1, height-1]], dtype="float32") M = cv2.getPerspectiveTransform(src_pts, dst_pts) # 进行透视变换 result = cv2.warpPerspective(img, M, (width, height)) # 显示结果 cv2.imshow('input', img) cv2.imshow('output', result) cv2.imwrite('result.jpg',result) cv2.waitKey(0)用到的函数解释
这段代码是使用OpenCV库对给定的图片进行透视变换,具体解释如下:
1. `cv2.imread('123.jpg')`:读取名为'123.jpg'的图片。
2. `cv2.resize(img,new_size)`:将图片进行缩放,大小变为(600,700)。
3. `cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)`:将彩色图像转换为灰度图像。
4. `cv2.GaussianBlur(gray,(9,9),2)`:对灰度图像进行高斯模糊处理,去除图像中的噪声。
5. `cv2.Canny(Gaussian, 100, 200)`:通过边缘检测算法Canny检测边缘。
6. `cv2.findContours(edges, cv2.RETR_TREE, cv2.CHAIN_APPROX_SIMPLE)`:对边缘进行轮廓检测,返回轮廓列表和层级结构。
7. `cv2.minAreaRect(max_contour)`:找到最大轮廓的最小矩形边界框。
8. `cv2.boxPoints(rect)`:根据矩形边界框计算出其四个顶点的坐标。
9. `cv2.getPerspectiveTransform(src_pts, dst_pts)`:根据输入的源点和目标点计算出变换矩阵。
10. `cv2.warpPerspective(img, M, (width, height))`:对原图像进行透视变换,得到变换后的图像。
11. `cv2.imshow()`:显示原图像和变换后的图像。
12. `cv2.imwrite()`:将变换后的图像保存为文件。
13. `cv2.waitKey(0)`:等待键盘输入,0表示一直等待,直到用户按下任意键。
阅读全文