【问题标题】:How to get pixel color from Matlab imaq.VideoDevice step() output如何从 Matlab imaq.VideoDevice step() 输出中获取像素颜色
【发布时间】:2015-08-22 00:50:05
【问题描述】:

我在 imaq.VideoDevice 中使用 step(),但找不到 step() 输出格式的描述。正在使用热红外相机,并希望过滤特定温度范围。

所以,我想在每一帧上使用 step(),然后在帧中搜索特定热范围内的像素。而且显然还需要知道每个像素的 X、Y。

我的目标是从帧中过滤像素,只留下所需温度范围内的像素。

【问题讨论】:

    标签: matlab image-processing computer-vision infrared


    【解决方案1】:

    您可能需要从红外热像仪获取温度和颜色信息。查找文档,它可能会说明哪些值对应于哪些像素值。此时,您只需为每一帧创建一个蒙版。像这样(假设红外相机的值是“灰度”,意味着只有一个通道)

    highest_temp = 200; %just a random number
    lowest_temp = 50;
    
    my_mask = (im <= higest_Temp) & (im >= loest_temp);
    

    my_mask 是一个逻辑数组,当像素超出范围时为 0,当像素在范围内时为 1(真)。如果您想将蒙版应用于图像,只需将它们相乘(并注意单位,这里我假设 IR 相机为

    masked_im = uint16(im .* double(mask));
    

    我也会使用触发函数而不是step 如果我没记错的话,默认情况下触发动作应该只需要 1 张图像/帧。所以做一个循环,抓取一个帧,做你的处理,然后去下一个循环迭代,一遍又一遍。希望有帮助

    【讨论】:

      【解决方案2】:

      回答: step() 输出 ROW X COLUMN X pixel_color 其中 pixel_color = index 1 是像素中的红色量。 pixel_color = index 2 是像素中的绿色量。 pixel_color = index 3 是像素中的蓝色量。

      例如,对于 X 处像素的颜色,Y = 5,10 = 第 5 行第 10 列 然后: 红色量 = (5, 10, 1) 绿色的量是 = (5, 10, 2) 蓝色的量是 = (5, 10, 3)

      显示带有红色列和绿色行的框架的示例用法........

      % 获取视频帧: load('handshakeStereoParams.mat'); videoFileLeft = 'handshake_left.avi'; readerLeft = vision.VideoFileReader(videoFileLeft, 'VideoOutputDataType', 'uint8'); frameLeft = readerLeft.step(); live_scene_player = vision.VideoPlayer('位置', [20, 600, 850, 500], '姓名','LEFT');

      % 在图像的第 10 行制作绿色水平条纹: frameLeft(10,:,1)=0; % 从条纹中去除红色 frameLeft(10,:,2)=255; % 开启全绿 frameLeft(10,:,3)=0; % 去除条纹中的蓝色

      % 在图像的第 10 列制作红色水平条纹: frameLeft(:,10,1)=255; % 从条纹中去除红色 frameLeft(:,10,2)=0; % 开启全绿 frameLeft(:,10,3)=0; % 去除条纹中的蓝色

      % 显示它: 步骤(live_scene_player,frameLeft); % 最初来自 frameLeftRect

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2013-07-11
        • 2013-07-21
        • 2018-09-07
        • 1970-01-01
        • 2014-08-05
        • 1970-01-01
        • 2019-07-27
        • 1970-01-01
        相关资源
        最近更新 更多