obj = VideoReader('7385387fac45ea1333c10147d8031da8.mp4');%输入视频位置 numFrames = obj.NumberOfFrames;% 帧的总数 for k = 1 :1 % 读取前15帧 frame = read(obj,k);%读取第几帧 frame_gray = rgb2gray(frame); % 将 RGB 彩色图像转换成灰度图像 frame_bw = im2bw(frame_gray); % 将灰度图像转换成二值图像 L = bwlabel(frame_bw); % 对二值图像进行标记 L1=edge(L,'canny'); imshow(L1),title('canny算子边缘检测'); I=frame+L1; imshow(unit(I)) imwrite(uint(I),strcat('D:\课设图片二\',num2str(k),'.jpg'),'jpg');% 保存帧 end错误使用 + 整数只能与同类的整数或双精度标量值组合使用。 出错 untitled1 (第 11 行) I=frame+L1;
时间: 2024-04-03 12:34:03 浏览: 46
通过canny算子对图像进行边缘检测
5星 · 资源好评率100%
这个错误提示是因为 frame 和 L1 的数据类型不同,不能直接进行加法运算。frame 是一个 uint8 类型的三通道图像数据,而 L1 是一个逻辑类型的二维图像数据,因此需要将 L1 转换成与 frame 相同的数据类型和大小后再进行加法运算。可以使用 im2uint8 函数将 L1 转换成 uint8 类型的图像数据,修改代码如下:
```matlab
frame_gray = rgb2gray(frame); % 将 RGB 彩色图像转换成灰度图像
frame_bw = im2bw(frame_gray); % 将灰度图像转换成二值图像
L = bwlabel(frame_bw); % 对二值图像进行标记
L1 = edge(L, 'canny');
L1 = im2uint8(L1); % 将 L1 转换成 uint8 类型的图像数据
I = imadd(frame, L1); % 将 frame 和 L1 相加
imshow(I), title('加边缘检测后的图像');
imwrite(I, strcat('D:\课设图片二\', num2str(k), '.jpg'), 'jpg'); % 保存帧
```
这样就可以将 L1 转换成与 frame 相同的数据类型和大小后,再将其与 frame 相加得到新的图像 I。
阅读全文