Matlab 运动检测使用 IP 网络摄像头给出奇怪的颜色

Posted

技术标签:

【中文标题】Matlab 运动检测使用 IP 网络摄像头给出奇怪的颜色【英文标题】:Matlab motion detection using IP Webcam giving weird colors 【发布时间】:2015-04-27 08:48:51 【问题描述】:

此代码使用安卓手机和应用程序“IP Webcam”(网址由应用程序提供),手机和笔记本电脑通过手机的热点连接。我的视频颜色有点问题。它们只是黄色/白色和黑色的阴影。有人可以帮我获取正确的视频吗?或者至少比这更好?代码:http://pastebin.com/RPBCVrzu 为了方便起见,我也将其粘贴在这里:

% vidDevice = imaq.VideoDevice('winvideo', 1, 'YUY2_640x480', ...
% 'ROI', [1 1 640 480], ...
% 'ReturnedColorSpace', 'rgb');
url = 'http://192.168.43.1:8080/shot.jpg';
ss  = imread(url);
optical = vision.OpticalFlow('OutputValue', 'Horizontal and vertical components in complex form');
% maxWidth = imaqhwinfo(vidDevice,'MaxWidth');
% maxHeight = imaqhwinfo(vidDevice,'MaxHeight');
maxWidth=size(ss,2);
maxHeight=size(ss,1);
shapes = vision.ShapeInserter;
shapes.Shape = 'Lines';
shapes.BorderColor = 'Custom';
shapes.CustomBorderColor = [255 0 0];
r = 1:5:maxHeight;
c = 1:5:maxWidth;
[Y, X] = meshgrid(c,r);
 hVideoIn = vision.VideoPlayer;
 hVideoIn.Name = 'Original Video';
hVideoIn.Position = [30 100 640 480];
hVideoOut = vision.VideoPlayer;
hVideoOut.Name = 'Motion Detected Video';
hVideoOut.Position = [700 100 640 480];
nFrames = 0;
while (nFrames < Inf)
%rgbData = step(vidDevice);
rgbData=single(imread(url));
optFlow = step(optical,rgb2gray(rgbData));
optFlow_DS = optFlow(r, c);
H = imag(optFlow_DS)*50;
V = real(optFlow_DS)*50;
lines = [Y(:)'; X(:)'; Y(:)'+V(:)'; X(:)'+H(:)'];
rgb_Out = step(shapes, rgbData, lines');
step(hVideoIn, rgbData);
step(hVideoOut, rgb_Out);
nFrames = nFrames + 1;
end
release(hVideoOut);
release(hVideoIn);
release(vidDevice);

【问题讨论】:

为什么有些行被注释掉了?那些是你直接连接相机时使用的部件吗?因为如果这是同一台相机,可能是色彩空间问题。 是的。那是为了从笔记本电脑的网络摄像头获取视频。你能帮我改正吗? 【参考方案1】:

'YUY2_640x480' 表示视频以 YUV 格式输入,而不是 RGB。有两种方法可以解决这个问题。如果您键入 imaqtool,您应该会看到 MATLAB 可见的所有相机格式的列表。如果你看到类似RGB_640x480 的东西,那应该会给你 RGB 视频。如果没有,请尝试使用 ycbcr2rgb 函数将您当前获取的帧转换为 RGB。

【讨论】:

但是我没有使用那行代码。这已被注释掉,因为它是针对集成笔记本电脑网络摄像头的。我需要一个解决手机摄像头奇怪颜色的方法:/

以上是关于Matlab 运动检测使用 IP 网络摄像头给出奇怪的颜色的主要内容,如果未能解决你的问题,请参考以下文章

有监督的运动检测库

从网络摄像头进行运动检测以使用 .NET 控制鼠标指针

图像检测基于帧差法实现视频运动目标检测matlab源码

来自前景提取的物体运动检测(grabcut)

检测视频中是不是存在摄像机运动以及手术视频中的移动物体

Javascript运动检测[关闭]