点灰色研究三杆仅读取1帧
Point Gray Research Triclops only reads 1 frame
我正在使用点灰色研究Bumblebee 2相机及其SDK。我有这个循环可以连续抓住框架,但它行不通。它抓住了第一个框架,但是TriclopsgetImage()似乎没有更新更新的内容(r | l),因为所示的图像仅来自第一个帧...任何人都有与点灰色摄像机或Triclops SDK的任何经验?
//There's more code above
int nframes = 20;
for (int frame = 0; frame < nframes ; frame++ ) {
te = triclopsGetImage( triclops, TriImg_RECTIFIED, TriCam_RIGHT, &refImageR );
te = triclopsGetImage( triclops, TriImg_RECTIFIED, TriCam_LEFT, &refImageL );
cv::Mat leftIm(cv::Mat::zeros(refImageR.nrows,refImageR.ncols,CV_8UC1));
cv::Mat rightIm(cv::Mat::zeros(refImageR.nrows,refImageR.ncols,CV_8UC1));
int counter = 0;
for (int row=0;row<refImageR.nrows;row++) {
for (int col=0;col<refImageR.ncols;col++) {
leftIm.at<uchar>(row,col) = refImageL.data[counter];
rightIm.at<uchar>(row,col) = refImageR.data[counter];
counter++;
}
}
imshow("LeftIm",leftIm);
imshow("RightIm",rightIm);
cv::waitKey(1000);
cout << "frame = " << frame << endl;
}
编辑
好吧,这并不优雅,但我认为这有帮助。即使这样做,我也只能得到第一帧的内容。我认为CV :: MAT左和右右都保留数据,或者没有更新,或者Triclops有问题。
TriclopsContext triclops;
从标题文件中说" TriclopsContext是一个指向内部结构的指针,它维护Triclops库所需的所有图像和簿记信息。它是所有参数的容器"
for (int frame = 1; frame < nframes ; frame++ ) {
if (frame == 1) {
te = triclopsGetImage( triclops, TriImg_RECTIFIED, TriCam_RIGHT, &refImageR1 );
te = triclopsGetImage( triclops, TriImg_RECTIFIED, TriCam_LEFT, &refImageL1 );
} else if (frame == 2) {
te = triclopsGetImage( triclops, TriImg_RECTIFIED, TriCam_RIGHT, &refImageR2 );
te = triclopsGetImage( triclops, TriImg_RECTIFIED, TriCam_LEFT, &refImageL2 );
} else if (frame == 3) {
te = triclopsGetImage( triclops, TriImg_RECTIFIED, TriCam_RIGHT, &refImageR3 );
te = triclopsGetImage( triclops, TriImg_RECTIFIED, TriCam_LEFT, &refImageL3 );
} else if (frame == 4) {
te = triclopsGetImage( triclops, TriImg_RECTIFIED, TriCam_RIGHT, &refImageR4 );
te = triclopsGetImage( triclops, TriImg_RECTIFIED, TriCam_LEFT, &refImageL4 );
} else if (frame == 5) {
te = triclopsGetImage( triclops, TriImg_RECTIFIED, TriCam_RIGHT, &refImageR5 );
te = triclopsGetImage( triclops, TriImg_RECTIFIED, TriCam_LEFT, &refImageL5 );
}
cv::Mat leftIm(cv::Mat::zeros(refImageR1.nrows,refImageR1.ncols,CV_8UC1));
cv::Mat rightIm(cv::Mat::zeros(refImageR1.nrows,refImageR1.ncols,CV_8UC1));
int counter = 0;
for (int row=0;row<refImageR1.nrows;row++) {
for (int col=0;col<refImageR1.ncols;col++) {
//leftIm.at<uchar>(row,col) = refImageL.data[counter];
//rightIm.at<uchar>(row,col) = refImageR.data[counter];
if (frame == 1) {
leftIm.at<uchar>(row,col) = refImageL1.data[counter];
rightIm.at<uchar>(row,col) = refImageR1.data[counter];
} else if (frame == 2) {
leftIm.at<uchar>(row,col) = refImageL2.data[counter];
rightIm.at<uchar>(row,col) = refImageR2.data[counter];
} else if (frame == 3) {
leftIm.at<uchar>(row,col) = refImageL3.data[counter];
rightIm.at<uchar>(row,col) = refImageR3.data[counter];
} else if (frame == 4) {
leftIm.at<uchar>(row,col) = refImageL4.data[counter];
rightIm.at<uchar>(row,col) = refImageR4.data[counter];
} else if (frame == 5) {
leftIm.at<uchar>(row,col) = refImageL5.data[counter];
rightIm.at<uchar>(row,col) = refImageR5.data[counter];
}
counter++;
}
}
imshow("LeftIm",leftIm);
imshow("RightIm",rightIm);
cv::waitKey(1000);
cout << "frame = " << frame << endl;
}
如果您查看Triclops SDK文件夹中的示例,则在获取图像之前显示他们的程序调用以下方法:
error = triclopsPreprocess( context, &inputData );
error = triclopsStereo( context );
您可能需要在循环的末尾调用它们,以告诉相机以计算下一帧的差异。
相关文章:
- Opencv 如何从相机读取单帧
- 用FFMPEG读取每帧时间码
- CAN套接字读取帧较晚
- 使用 OpengGLES2(角度)从帧缓冲区对象读取
- 如何使用GDCM读取多帧DICOM文件?
- 使用 OpenCV 读取视频帧到指定的指针 (C++)
- 在无窗口 GLX 程序中读取 OpenGL 的默认帧缓冲
- 为什么从套接字读取时 CAN 总线帧 ID 向后?
- 无法使用OpenCV从辅助网络摄像头读取VideoCapture中的帧
- 点灰色研究三杆仅读取1帧
- 读取 PSEye 相机帧
- C++突然阻止使用VideoCapture从IP摄像机读取帧
- 在 OpenCV 2.4.2 中从 CIF 视频读取帧
- c++读取上一个函数堆栈帧
- 通过DirectShow请求读取帧
- OpenGL:从许多帧缓冲纹理中读取空间像素数据的有效方法
- OpenCV VideoCapture c++:读取2帧得到相同的图像
- 我如何在Qt/C中读取当前帧缓冲区上的图像
- 读取可见帧缓冲区到像素缓冲区对象
- FFMPEG 读取关键帧