我需要在MATLAB中裁剪视频的一个特定区域,以被重放并保存为该特定区域。目前,我只知道一种方法来分离所有的帧,对它们进行裁剪,然后将它们作为视频放回一起--在MATLAB中是否有更简单的方法或工具来裁剪视频,或者我只需要依赖逐帧裁剪?
发布于 2016-08-24 06:46:56
Matlab对于视频处理来说通常是可怕的。我建议使用通用的视频编辑器。如果您必须使用matlab,有两个工具箱在文件交换上,这将满足您的目的(在最一般格式的短视频,也需要图像工具箱)。
描述 使用电影编辑器你可以:-加载电影(只有avi‘s)-裁剪电影-把电影分割成不同的颜色层-旋转电影-保存电影为avi或mpg (感谢大卫·福蒂)--将独立的帧保存为bmp、jpg、png和tif --您可以使用幻灯片并在图像下面编辑文本(也许有人可以将其与Don Orofino的“交互式MATLAB电影播放器”结合起来)。也许你能加个函数?用户界面非常清楚。但问题是欢迎的。在压缩文件中添加了一个前后电影的示例。
发布于 2021-01-29 01:26:54
下面是我不久前为处理视频文件而编写的代码。在执行此文件之前,请将ROI1.m文件保存在路径中。
%frame by frame processing of video files
clear all;
close all;
clc;
mov=VideoReader('C:\Users\Syd_R\OneDrive\Desktop\entrap\holo_bright_10_MMStack_Pos0.ome.avi');
vidFrames=read(mov);
nFrames=mov.NumberOfFrames;
A=vidFrames(:,:,1);
for fr=1:nFrames
set(0,'DefaultFigureVisible','off')
elseX=vidFrames(:,:,fr);
if exist('position')==0
ROI1
else
imshow(elseX)
I2 = imcrop(elseX,[position(:,1) position(:,2) position(:,3) position(:,4)]);
end
mycell_h(fr)={I2};
end
close all;
set(0,'DefaultFigureVisible','on')
% This file should be saved (as ROI1.m) in the same path as this file will be called while executing the main file
% ROI
if exist('A')==1;
figure, imshow(A);
h = imrect(gca,[10 10 512 512]);
position = wait(h); % returns coordinates in "position" when user doubleclicks on rectangle
figure, imshow(A)
I2=imcrop(A,position);
phROI2=I2;
figure(11);
imshow(phROI2);
imwrite(phROI2, 'roi', 'tiff')
end;
裁剪后的帧将保存在单元格mycell_h中。要查看裁剪的帧,例如:
imshow(mycell_h{1,1})
https://stackoverflow.com/questions/39124490
复制