运动检测matlab,关于运动物体检测及追踪

该楼层疑似违规已被系统折叠 隐藏此楼查看此楼

clc;

clear all;

imaqmem(30000000);               %申请内存空间

obj = videoinput('winvideo',1,'RGB24_800x600')%这里我们使用默认的视频采集格式

%frame是H×W×B的矩阵。H图像高度,由ROIPosition指定;w图像宽度,由ROIPosition指定;B索线个数,由NumberOfBands指定

%====================================================================

vidRes = get(obj, 'VideoResolution');

nBands = get(obj, 'NumberOfBands');

figure()%指定预览窗体显示的figure

axes()%指定预览窗口显示的坐标系

hImage = image( zeros(vidRes(2), vidRes(1), nBands) );

preview(obj, hImage);

%====================================================================

h=figure;

i=1;

f1=0;

f2=0;

while(h)

frame = getsnapshot(obj);%获取视频的一帧

%flushdata(obj);     %清除数据获取引擎的所有数据、置属性SamplesAvailable为0

frame=ycbcr2rgb(frame);%色彩空间转换

frame=double(rgb2gray(frame));

rows=600;

cols=800;

if i>3

d(:,:,l)=frame-2*f1+f2;

k=d(:,:,l);

bw(:,:,l) = im2bw(k, .2);

bw1=bwlabel(bw(:,:,l));

imshow(bw(:,:,l));%显示获取那一帧

drawnow;% 实时更新图像

end

f2=f1;

f1=frame;

i=i+1;

end

%delete(obj);

%imwrite(frame,'snap.jpg','jpg');

cou=1;

for h=1:rows

for w=1:cols

if(bw(h,w,l)>50)

toplen = h;

if (cou == 1)

tpln=toplen;

end

cou=cou+1;

break

end

end

end

disp(toplen);

coun=1;

for w=1:cols

for h=1:rows

if(bw(h,w,l)>50)

leftsi = w;

if (coun == 1)

lftln=leftsi;

coun=coun+1;

end

break

end

end

end

disp(leftsi);

disp(lftln);

widh=leftsi-lftln;

heig=toplen-tpln;

widt=widh/2;

disp(widt);

heit=heig/2;

with=lftln+widt;

heth=tpln+heit;

wth(l)=with;

hth(l)=heth;

disp(heit);

disp(widh);

disp(heig);

rectangle('Position',[lftln tpln widh heig],'EdgeColor','r');

disp(with);

disp(heth);

plot(with,heth, 'r*');

drawnow;

hold off

end;

谁可以跟我看看这程序那里错了?可以跟我改改么...

谢谢大侠了.

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
以下是一个简单的运动目标检测追踪Matlab代码示例: ``` % 读取视频 video = VideoReader('example.mp4'); % 初始化背景模型 background = readFrame(video); background = im2double(background); % 设置阈值 threshold = 0.1; % 设置运动物体检测器 detector = vision.ForegroundDetector('NumGaussians', 3, 'NumTrainingFrames', 50); % 创建运动物体追踪器 tracker = vision.HistogramBasedTracker; % 处理每一帧 while hasFrame(video) % 读取当前帧 frame = readFrame(video); frame = im2double(frame); % 计算当前帧和背景之间的差异 diff = detector(frame); % 提取二值化图像 bw = imbinarize(diff, threshold); % 连通区域分析 cc = bwconncomp(bw); % 处理每个运动物体 for i = 1:cc.NumObjects % 提取区域 region = cc.PixelIdxList{i}; % 计算区域的中心点 [y, x] = ind2sub(size(frame), region); center = [mean(x), mean(y)]; % 更新追踪器 if i == 1 initializeObject(tracker, frame, center); else center = step(tracker, frame); end % 显示结果 frame = insertShape(frame, 'rectangle', tracker.BoundingBox, 'LineWidth', 2); end % 显示结果 imshow(frame); end ``` 该代码使用了视频处理工具箱中的一些函数,包括: - `VideoReader`:读取视频 - `im2double`:将图像转换为双精度浮点数 - `vision.ForegroundDetector`:创建运动物体检测器 - `imbinarize`:将图像二值化 - `bwconncomp`:执行连通区域分析 - `vision.HistogramBasedTracker`:创建运动物体追踪器 - `insertShape`:在图像中插入矩形框 这只是一个简单的示例,如果需要更复杂的功能,可能需要使用更多的函数和算法。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值