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 网络摄像头给出奇怪的颜色的主要内容,如果未能解决你的问题,请参考以下文章