如何从 Matlab imaq.VideoDevice step() 输出中获取像素颜色

How to get pixel color from Matlab imaq.VideoDevice step() output

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

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

我的目标是过滤帧中的像素并仅保留所需温度范围内的像素。

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

highest_temp = 200; %just a random number
lowest_temp = 50;

my_mask = (im <= higest_Temp) & (im >= loest_temp);

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

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

我也会使用触发功能而不是 step 如果我没记错的话,默认情况下触发操作应该只需要 1 image/frame。所以制作一个循环,抓取一个帧,进行处理,然后一遍又一遍地转到下一个循环迭代。希望有帮助

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

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

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

% 获取视频帧: 负载('handshakeStereoParams.mat'); videoFileLeft = 'handshake_left.avi'; readerLeft = vision.VideoFileReader(videoFileLeft, 'VideoOutputDataType', 'uint8'); frameLeft = readerLeft.step(); live_scene_player = vision.VideoPlayer('Position', [20, 600, 850, 500], 'Name','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