【Opencv】打开双目相机并保存图像

前段时间一直在学opencv视觉相关的内容,用的相机也只是单目的,过段时间实验室有个项目是双臂机器人相关的,需要用到双目相机,把物体的距离和位置测出来,所以今天就发一篇怎么打开双目摄像头的博客。

我这里用到的相机是在淘宝上的几十块钱的相机,先拿来来练练手,后期再学习微软的Kinect或者Intel的relsence相机。

                         

直接上代码 上面有注释  有问题留言:

#include<iostream>
#include<string>
#include<sstream>
#include<opencv2/core.hpp>
#include<opencv2/highgui.hpp>
#include<opencv2/videoio.hpp>
#include<opencv2/opencv.hpp>
#include<stdio.h>
using namespace std;
using namespace cv;
const char* keys =
{
	"{help h usage ? | | print this message}"
	"{@video | | Video file, if not defined try to use webcamera}"
};

int main(int argc, const char** argv)            //程序主函数
{
	CommandLineParser parser(argc, argv, keys);
	parser.about("Video Capture");

	if (parser.has("help"))                      //帮助信息
	{
		parser.printMessage();
		return 0;
	}
	String videoFile = parser.get<String>(0);

	if (!parser.check())
	{
		parser.printErrors();
		return 0;
	}

	VideoCapture cap;
	if (videoFile != "")
	{
		cap.open(videoFile);
	}
	else
	{

		cap.open(0);                             //打开相机,电脑自带摄像头一般编号为0,外接摄像头编号为1,主要是在设备管理器中查看自己摄像头的编号。
												 //--------------------------------------------------------------------------------------

		cap.set(CV_CAP_PROP_FRAME_WIDTH, 2560);  //设置捕获视频的宽度
		cap.set(CV_CAP_PROP_FRAME_HEIGHT, 720);  //设置捕获视频的高度
	}
	if (!cap.isOpened())                         //判断是否成功打开相机
	{
		cout << "摄像头打开失败!" << endl;
		return -1;
	}
	Mat frame, frame_L, frame_R;

	cap >> frame;                                //从相机捕获一帧图像

	Mat grayImage;                               //用于存放灰度数据

	double fScale =1;                         //定义缩放系数,对2560*720图像进行缩放显示(2560*720图像过大,液晶屏分辨率较小时,需要缩放才可完整显示在屏幕)  
	Size dsize = Size(frame.cols*fScale, frame.rows*fScale);
	Mat imagedst = Mat(dsize, CV_32S);
	resize(frame, imagedst, dsize);
	char key;
	char image_left[200];
	char image_right[200];
	int count1 = 0;
	int count2 = 0;
	namedWindow("图片1", 1);
	namedWindow("图片2", 1);


	while (1)
	{
		key = waitKey(50);
		cap >> frame;                            //从相机捕获一帧图像
		resize(frame, imagedst, dsize);          //对捕捉的图像进行缩放操作

		frame_L = imagedst(Rect(0, 0, 640, 360));  //获取缩放后左Camera的图像
		namedWindow("Video_L", 1);
		imshow("Video_L", frame_L);

		frame_R = imagedst(Rect(0, 0, 640, 360)); //获取缩放后右Camera的图像
		namedWindow("Video_R", 1);
		imshow("Video_R", frame_R);
		if (key == 27) //按下ESC退出
			break;
		if (key == 32) // 按下空格开始拍照图片保存在工程文件下
		{
			sprintf_s(image_left, "image_left_%d.jpg", ++count1);
			imwrite(image_left, frame_L);
			imshow("图片1", frame_L);
			sprintf_s(image_right, "image_right_%d.jpg", ++count2);
			imwrite(image_right, frame_R);
			imshow("图片2", frame_R);
		}
	}

	return 0;
}

这样就打开了两个相机,后续的标定和测量距离继续更新博客~~~

  • 2
    点赞
  • 26
    收藏
    觉得还不错? 一键收藏
  • 9
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 9
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值