% 读取视频帧序列 v = VideoReader('shoujilux7.mp4'); % 遍历视频帧序列 while hasFrame(v) % 读取当前帧并将其转换为灰度图像 frame = readFrame(v); gray_frame = rgb2gray(frame); % 进行gamma校正 gamma = 1.5; gamma_corrected = imadjust(gray_frame,[],[],gamma); % 进行高斯滤波 sigma = 1; hsize = ceil(6sigma); h = fspecial('gaussian', hsize, sigma); filtered_frame = imfilter(gamma_corrected, h); % 对滤波后的图像进行模拟退火算法改进下的Otsu阈值分割 T = graythresh(filtered_frame); [m, n] = size(filtered_frame); E = bwareaopen(im2bw(filtered_frame, T), round(mn/1000), 8); % 进行Canny边缘检测 canny_edge = edge(E, 'canny'); % 显示处理后的帧 imshow(canny_edge); end形态学处理填充,建立像素坐标系,由边缘求质心坐标,显示出来
时间: 2023-12-06 19:42:10 浏览: 69
opencv图序列与视频相互转换.rar_opencv图序列与视频相互转换
可以在代码中添加如下步骤:
```
% 进行形态学处理填充
se = strel('disk',2);
binary_image = imclose(canny_edge,se);
% 建立像素坐标系
[x,y] = meshgrid(1:n,1:m);
% 求质心坐标
centroid_x = sum(x(binary_image))/sum(binary_image(:));
centroid_y = sum(y(binary_image))/sum(binary_image(:));
% 显示出来
imshow(frame);
hold on;
plot(centroid_x, centroid_y, 'r+', 'MarkerSize', 20);
```
上述代码中,首先进行形态学处理填充,使得边缘更加完整。然后建立像素坐标系,通过计算像素值为1的点的坐标的平均值求出质心坐标。最后在原始图像上显示出来,红色加号表示质心坐标。
阅读全文