实时跟踪摄像头跟踪视频中的红 {MOD}运动目标,我想要把他改为跟踪黑 {MOD}目标,请各位帮帮忙,谢谢大家

2019-07-17 13:03发布

本帖最后由 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 :) ')


友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
4条回答
zhjb1
1楼-- · 2019-07-17 16:16
我没有做过这类的,也没有细分析您的代码。但可以从原理上细分析一下看看能否有助:
无论什么采集一般采集到的信号到电脑后的颜 {MOD}位RGB或再加上黑白,在您的题目中应该只有RGB {MOD},R-红 {MOD}了,只要设定一个阈值将G和B过滤掉,剩下的就是红黑 {MOD}的了,程序中似乎有红 {MOD}的站到总像素的x%就可以认为是对的了。同理:RGB都设定一个阈值,当信号小于此阈值表示为黑,因为RGB一样时为白。同样判定黑块的面积大于x%表示Ok。想想是这个理吗?
hahalm
2楼-- · 2019-07-17 16:46
zhjb1 发表于 2017-7-14 15:40
我没有做过这类的,也没有细分析您的代码。但可以从原理上细分析一下看看能否有助:
无论什么采集一般采集到的信号到电脑后的颜 {MOD}位RGB或再加上黑白,在您的题目中应该只有RGB {MOD},R-红 {MOD}了,只要设定一个阈值将G和B过滤掉,剩下的就是红黑 {MOD}的了,程序中似乎有红 {MOD}的站到总像素的x%就可以认为是对的了。同理:RGB都设定一个 ...

现在实时跟踪红 {MOD}物体   
%我们必须减去红 {MOD}分量。   
%从灰度图像中提取图像中的红 {MOD}组件。   
diff_im = imsubtract(data(:,:,3), rgb2gray(data));  

谢谢您的回答,我就是这句看不懂,data(:,:,3)中的3要改为1就是提取红 {MOD},改为2就是提取绿 {MOD},改为3就是提取蓝 {MOD},他只能改为这三个数,改为其他的就出错了,麻烦请教一下要怎么改为提取黑 {MOD},麻烦前辈帮忙把我的程序改一下,万分感谢,我是真的没办法了,拜托了,谢谢前辈!!!
zhjb1
3楼-- · 2019-07-17 22:20
 精彩回答 2  元偷偷看……
hahalm
4楼-- · 2019-07-17 23:32
zhjb1 发表于 2017-7-14 21:36
我没有用过仿真类的软件,实在不知道应该如何改。只有以上的思路。Sorry。

谢谢前辈了,没关系,非常感谢!!!

一周热门 更多>