双目相机的读取和拆分
这款型号的双目读出来的是左右拼接在一起的帧,需要另外分割一下使其分离。
分辨率有三种格式:640x240(分离后左右每帧320x240),1280x480(分离后每帧640x240),2560x960(分离后每帧1280x480)。
注意:可以更改分辨率,但是无论你的分辨率怎么改,最后都会默认成设置最接近的三种分辨率之一,感兴趣的可以试试。
我把每帧分离后分别保存到不同文件夹中,运行之后按空格键就可以保存当前帧。
在这里插入代
#include <opencv2/opencv.hpp>
#include <iostream>
#include<opencv2\highgui\highgui.hpp>
using namespace cv;
using namespace std;
void CornerHarris_Demo(int, void*);
Mat frame, img, gray, dst;
Mat leftImg, rightImg;
int main(int argc, char** argv)
{
//videocapture结构创建一个catture视频对象
VideoCapture capture;
//连接视频
capture.open(1);
if (!capture.isOpened()) {
printf("could not load video data...\n");
return -1;
}
int frames = capture.get(CAP_PROP_FRAME_COUNT);//获取视频针数目(一帧就是一张图片)
int fps = capture.get(CAP_PROP_FPS);//获取每针视频的频率
capture.set(CAP_PROP_FRAME_WIDTH,1280);
capture.set(CAP_PROP_FRAME_HEIGHT,480);
int WIDTH = capture.get(CAP_PROP_FRAME_WIDTH);
int HEIGHT = capture.get(CAP_PROP_FRAME_HEIGHT);
// 获取帧的视频宽度,视频高度
Size size = Size(capture.get(CAP_PROP_FRAME_WIDTH), capture.get(CAP_PROP_FRAME_HEIGHT));
cout << frames << endl;
cout << fps << endl;
cout << size << endl;
capture >> frame;
cout << frame.cols << " " << frame.rows << endl;
// 创建视频中每张图片对象
namedWindow("video-demo", WINDOW_AUTOSIZE);
// 循环显示视频中的每张图片
int count = 1;
for (;;)
{
//将视频转给每一张张图进行处理
capture >> frame;
//省略对图片的处理
//视频播放完退出
if (frame.empty())break;
imshow("video-demo", frame);
//拆分视屏为左右两框
Rect leftRect(0, 0, WIDTH >> 1, HEIGHT); //创建一个Rect框,属于cv中的类,四个参数代表x,y,width,height
Rect rightRect(WIDTH >> 1, 0, WIDTH >> 1, HEIGHT);
//Rect rightRect(WIDTH / 2, 0, WIDTH / 2, HEIGHT);
frame(leftRect).copyTo(leftImg);
frame(rightRect).copyTo(rightImg);
namedWindow("left", WINDOW_AUTOSIZE);
namedWindow("right", WINDOW_AUTOSIZE);
imshow("left", leftImg);
imshow("right", rightImg);
//按空格键保存当前帧
if (waitKey(33) == 32)
{
static int num = 1;
String left_img_name, right_img_name;
left_img_name = "left_" + to_string(num) + ".jpg";
right_img_name = "right_" + to_string(num) + ".jpg";
cout << left_img_name << " " << right_img_name << endl;
num++;
imwrite("E:\\picture\\stereo_camera\\重建左\\" + left_img_name, leftImg);
imwrite("E:\\picture\\stereo_camera\\重建右\\" + right_img_name, rightImg);
}
//在视频播放期间按键退出
if (waitKey(25) == 27) break;
}
//释放
captur