Labfans是一个针对大学生、工程师和科研工作者的技术社区。 | 论坛首页 | 联系我们(Contact Us) |
![]() |
|
![]() |
#1 |
初级会员
注册日期: 2009-05-10
帖子: 8
声望力: 0 ![]() |
![]()
clear all
close all aviobj=avifile('object.avi'); info=aviinfo('D:\SampleVideo.avi'); numframe=info.NumFrames; mov=aviread('D:\SampleVideo.avi'); frame1=frame2im(mov(1,1)); frame1=rgb2gray(frame1); % imshow(frame1); [m,n]=size(frame1); for i=1:numframe-1 %提取第i帧和第i+1帧,并将之转化为两幅图像 f1=aviread('D:\SampleVideo.avi',i); f2=aviread('D:\SampleVideo.avi',i+1); f1=frame2im(f1); I1=rgb2gray(f1); f2=frame2im(f2); I2=rgb2gray(f2); %求差分图像并二值化 Im=abs(imsubtract(I2,I1)); if Im>150 Imby=1; else Imby=0; end I=Imby; %求二值后目标图像的质点 M00=0; M10=0; M01=0; M20=0; M02=0; M11=0; for j=1:m; for k=1:n; M00=M00+I(j,k); M10=M10+j*I(j,k); M01=M01+k*I(j,k); M20=M20+(j^2)*I(j,k); M02=M02+(k^2)*I(j,k); M11=M11+j*k*I(j,k); end end xcenter=M10/M00; ycenter=M01/M00; a=M20/M00-xcenter^2; b=M11/M00-xcenter*ycenter; c=M02/M00-ycenter^2; %下段程序实现功能:求目标长轴与短轴的长度以确定目标大小 l=sqrt(1/2*((a+c)+sqrt(b^2+(a-c)^2)));%目标长轴计算 w=sqrt(1/2*((a+c)-sqrt(b^2+(a-c)^2)));%目标短轴计算 xmin=round(xcenter-l/2); xmax=round(xcenter+l/2); ymin=round(ycenter-w/2); ymax=round(ycenter+w/2); %以目标中心为中心画框形以框住目标 tagx=[xmin,xmax,xmax,xmin]; tagy=[ymin,ymin,ymax,ymax]; fill(x,y,'w'); %将图像转化为帧,并加入到新avi文件中 I1=gray2rgb(I1); I1=im2frame(I1); aviobj=addframe(aviobj,I1); end mov=aviread('aviobject.avi'); movie(mov); 执行后,出现“index exceeds matrix dimensions"! 在此多谢了!急!能给出详细的程序改正语句,更好! |
![]() |
![]() |
![]() |
#2 |
高级会员
注册日期: 2008-11-01
年龄: 39
帖子: 406
声望力: 26 ![]() |
![]()
lz 能否把错误的整句提示写上来
另外 可能需要你有关的数据 不知道你能否提供一下 以便于调试? 此帖于 2009-05-17 17:17 被 silas_xue 编辑。 |
![]() |
![]() |
![]() |
#3 |
初级会员
注册日期: 2009-05-10
帖子: 8
声望力: 0 ![]() |
![]()
哦 object.avi是程序开头新建的一个文件 没有其相关数据 可能这点是在向其添加帧时有错 请求大侠帮审改下 源avi文件附上 先谢过大侠的帮助了!SampleVideo.rar
Warning: Closing all open AVI files. It is no longer possible to write to any previously open AVI files. ??? Index exceeds matrix dimensions. 这就是完整的错误提示! 此帖于 2009-05-17 11:29 被 tyhj327 编辑。 |
![]() |
![]() |
![]() |
#4 |
初级会员
注册日期: 2009-05-10
帖子: 8
声望力: 0 ![]() |
![]()
其实整个程序就是实现目标跟踪 那大侠帮忙将最后那段将灰度图像转化为电影帧的程序段改下吧 谢
|
![]() |
![]() |
![]() |
#5 |
高级会员
注册日期: 2008-11-01
年龄: 39
帖子: 406
声望力: 26 ![]() |
![]()
lz 我不是什么大侠 大家多多交流 共同进步
仅从最后的程序段考察 如果是新的matlab版本 mov=aviread('aviobject.avi');前应当加入aviclose( )的函数 |
![]() |
![]() |