OpenCV多摄像机单图像
OpenCV multiple cameras single image
我试图在MacOS 10.11中访问openCV中的多个usb摄像头。我的目标是通过USB四通道扩展将多达20个相机连接到pc并拍摄单个图像。我不需要直播。
我尝试了以下代码,我可以从所有相机(目前只有3个,通过一个usb控制器)拍摄单个图像。
问题是:opencv流直播视频从usb相机所有的时间,还是抓取()存储在相机上的图像,可以检索检索()?
我找不到信息,无论是opencv在其内部视频缓冲区上使用grab()命令,还是在相机上。
int main(int argument_number, char* argument[])
{
std::vector<int> cameraIDs{0,1,2};
std::vector<cv::VideoCapture> cameraCaptures;
std::vector<std::string> nameCaptures{"a","b","c"};
//Load all cameras
for (int i = 0;i<cameraIDs.size();i++)
{
cv::VideoCapture camera(cameraIDs[i]);
if(!camera.isOpened()) return 1;
camera.set(CV_CAP_PROP_FRAME_WIDTH, 640);
camera.set(CV_CAP_PROP_FRAME_HEIGHT, 480);
cameraCaptures.push_back(camera);
}
cv::namedWindow("a");
while(true) {
int c = cvWaitKey(2);
if(27 == char(c)){ //if esc pressed. grab new image and display it.
for (std::vector<cv::VideoCapture>::iterator it=cameraCaptures.begin();it!=cameraCaptures.end();it++)
{
(*it).grab();
}
int i=0;
for (std::vector<cv::VideoCapture>::iterator it=cameraCaptures.begin();it!=cameraCaptures.end();it++)
{
cv::Mat3b frame;
(*it).retrieve(frame);
cv::imshow(nameCaptures[i++], frame);
}
}
}
return 0;
}
你能不能把话说清楚一点?你只需要提要中的帧,或者你希望流始终连接。
Opencv相机捕获总是处于运行模式,除非你释放捕获设备。如果你说你只想要一个设备的一帧,那么最好是在取回帧后释放这个设备。
另一点是,与其在多摄像头环境中使用抓取或检索,不如使用read(),它结合了上述两种方法,减少了解码流的开销。所以,如果你想要从每一个凸轮中获取@ 2秒位置的帧那么在时域中它们是非常接近的比如从cam1中获取@ 2秒位置的帧x然后从cam3中获取2.0001秒和2.00015秒的帧x。(时间复用-多线程-内部由ocv)
我希望我解释得很清楚。谢谢
相关文章:
- 平均图像时图像损坏
- Tesseract/Lebonica处理单页和多页图像的正确方法
- 如何快速创建一组覆盖两个图像的图像
- 从 dll 调用 opencv 垫到 Windows 表单,图像出现故障
- 有没有办法使用 glDrawPixel 渲染单通道灰度图像?
- 在单击QT中单击图像时,尝试立即显示用户编辑操作的结果
- 我可以将从相机获取的单通道图像输出到 winAppi 窗口中吗?
- 忽略父 Qt 快速图像的透明区域的鼠标区域单击事件
- Qt表查看单元格中的显示图像并在单击时获取路径
- 在调整大小窗口时,如何使用鼠标单击来获取图像的坐标
- 打印像素值,但图像重叠.图像是其应有大小的三倍
- 图像和图像处理中的特征提取
- 用cuda处理图像,图像不变
- 访问像素值,而不在内存中加载大图像的图像
- 自由图像报告图像颜色类型错误
- 如何使用CImg显示少量图像(每个图像在单独的窗口中)
- OpenCV多摄像机单图像
- 是否可以使用c++ /OpenFrameworks将图像(或图像序列)作为硬件设备(网络摄像头)传递给Mac OSX ?
- 寻找单图像HDR算法
- 将示例图像与图像数据库进行比较时出现意外结果 - Opencv c++