本帖最后由 hahalm 于 2017-7-13 16:07 编辑
tinghei SC, Microsoft YaHei, arial, 宋体, sans-serif, tahoma"> 大佬们,下面是一个基于matlab的红 {MOD}跟踪程序,它可以实时跟踪摄像头获取视频中的红 {MOD}部分,可是我想把它改为可以实时跟踪摄像头获取视频中的黑 {MOD}部分,注意是黑 {MOD}部分,要怎么修改啊,我刚学MATLAB,对于运动目标的检测还不熟悉,希望大家可以帮帮忙,积分也不多,我是诚心提问的,谢谢大家了!!!a = imaqhwinfo;%[camera_name, camera_id, format] = getCameraInfo(a);
% 为捕获的视频帧的视频输入功能%必须替换分辨率&安装的适配器名称。vid = videoinput('winvideo',1,'YUY2_320x240');
% 设置视频对象的属性
set(vid, 'FramesPerTrigger', Inf);set(vid, 'ReturnedColorspace', 'rgb')vid.FrameGrabInterval = 5;
%启动视频采集在这里
start(vid)
% 设置一个循环,在100帧的采集站
while(vid.FramesAcquired<=200)
% 获取当前帧的快照
data = getsnapshot(vid);
% 现在实时跟踪红 {MOD}物体
%我们必须减去红 {MOD}分量。
%从灰度图像中提取图像中的红 {MOD}组件。
diff_im = imsubtract(data(:,:,3), rgb2gray(data));
%使用中值滤波器滤除噪声
diff_im = medfilt2(diff_im, [3 3]);
% 将生成的灰度图像转换为二进制图像。
diff_im = im2bw(diff_im,0.18);
% 将这些像素小于300px
diff_im = bwareaopen(diff_im,300);
% 标记图像中所有连接的组件。
bw = bwlabel(diff_im, 8);
%这里我们做图像斑点分析。
%,我们为每个标记区域获取一组属性。
stats = regionprops(bw, 'BoundingBox', 'Centroid');
% 显示图像
imshow(data)
hold on
%这是一个将矩形框中的红 {MOD}物体绑定的循环。
for object = 1:length(stats)
bb = stats(object).BoundingBox;
bc = stats(object).Centroid;
rectangle('Position',bb,'EdgeColor','r','LineWidth',2)
plot(bc(1),bc(2), '-m+')
a=text(bc(1)+15,bc(2), strcat('X: ', num2str(round(bc(1))), ' Y: ', num2str(round(bc(2))))); set(a, 'FontName', 'Arial', 'FontWeight', 'bold', 'FontSize', 12, 'Color', 'yellow');
end
hold offend
% 两个环路都在这里结束。
% 停止视频采集。
stop(vid);
%刷新存储在内存缓冲区中的所有图像数据。
flushdata(vid);
%清除所有的变量
clear allsprintf('%s','That was all about Image tracking, Guess that was pretty easy :) ')
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
无论什么采集一般采集到的信号到电脑后的颜 {MOD}位RGB或再加上黑白,在您的题目中应该只有RGB {MOD},R-红 {MOD}了,只要设定一个阈值将G和B过滤掉,剩下的就是红黑 {MOD}的了,程序中似乎有红 {MOD}的站到总像素的x%就可以认为是对的了。同理:RGB都设定一个阈值,当信号小于此阈值表示为黑,因为RGB一样时为白。同样判定黑块的面积大于x%表示Ok。想想是这个理吗?
一周热门 更多>