双目相机的读取和拆分




这款型号的双目读出来的是左右拼接在一起的帧,需要另外分割一下使其分离。

分辨率有三种格式: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