如何在立体声的同一窗口中并排显示 2 个网络摄像头视频?
Posted
技术标签:
【中文标题】如何在立体声的同一窗口中并排显示 2 个网络摄像头视频?【英文标题】:How to display 2 webcam videos side by side in the same window for stereo? 【发布时间】:2013-09-01 01:10:14 【问题描述】:我想使用 3D 头戴式显示器 (HMD) 为第一人称视角 (FPV) 创建立体视频源。如何在同一视频中显示 2 个网络摄像头视频,然后使用箭头键调整它们的位置?
【问题讨论】:
您是否要使用视频流并创建一个视频流,原始帧并排在一帧中?我不确定你想用“以便每个人都可以定位和移动”来实现什么。 对不起,我太含糊了。我想并排显示 2 个单独的网络摄像头流,然后使用箭头键调整它们的位置以允许 e 校正收敛。我真的不应该将 2 个问题捆绑成 1 个问题。谢谢 【参考方案1】:并排显示 2 个视频非常简单 - 只需从两个摄像头获取帧并将结果复制到一个图像(Mat)中:
VideoCapture videoLeft(0), videoRight(1);
Mat left, right, both;
int width = 640, height = 480;
both = Mat(height + 100, 2 * width + 150, CV_MAKETYPE(8, 3), CV_RGB(100, 100, 100));
while(true)
videoLeft >> left;
videoRight >> right;
if (left.data == NULL || right.data == NULL)
break;
left.copyTo(Mat(both, Rect(50, 50, width, height)));
right.copyTo(Mat(both, Rect(100 + width, 50, width, height)));
imshow("images", both);
waitKey(30);
将此代码中的宽度和高度值替换为从您的相机抓取的图像大小 - 您可以通过检查 left.rows
(height) 和 left.cols
(width) 的值轻松检查它。
您可以调整这两条线的位置:
left.copyTo(Mat(both, Rect(50, 50, width, height)));
right.copyTo(Mat(both, Rect(100 + width, 50, width, height)));
只需使用 Rect 构造函数的第一个和第二个参数的值。第一个参数是 x 位置,第二个是 y。您可以在按下某个键后更改它们。更多信息 - [由于链接断开而更新为网络存档:] http://web.archive.org/web/20130619174223/http://bsd-noobz.com/opencv-guide/45-1-using-keyboard
【讨论】:
谢谢!我今天会试一试。 @cyriel 还有什么方法可以访问该教程吗?链接已损坏。以上是关于如何在立体声的同一窗口中并排显示 2 个网络摄像头视频?的主要内容,如果未能解决你的问题,请参考以下文章
使用 JAVA + Java 小程序从多个 USB 摄像头捕获视频并在 UI 中并排显示