C++_Opencv 4.0+_读取_双目摄像头

本文详细介绍了一种在Windows 11环境下,利用OpenCV 4.0操作HBV-1780-2S2.0双目摄像头的方法,包括设置分辨率获取双镜头图像,以及如何分离左右摄像头图像并进行预处理。通过代码示例展示了图像分离和显示的过程。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

文章介绍一种双目摄像头左右镜头图像读取方法

摄像头型号:HBV-1780-2 S2.0

环境:Win11、VS2019、Opencv4.0+

摄像头购买于淘宝商家,商家提供了图像采集示例程序。程序中给出了几种分辨率,不同的分辨率会影响摄像头的图像是单镜头图像还是双镜头组合图像。我们选择宽度分辨率较大的模式即可看到两颗摄像头共同返回的图像(记住可以同时看见两颗摄像头返回图像的分辨率大小,后续在设置摄像头参数时将会使用到)。

实现功能:

分离左右摄像头图像,并自由返回。

以下为功能实现代码:

#include <iostream>
#include <opencv2/opencv.hpp>
#include <opencv2/highgui.hpp>
#include <opencv2/core.hpp>
#include <opencv2/imgproc.hpp>
#include <opencv2/video.hpp>

using namespace cv;
using namespace std;

VideoCapture cap(1);



/*****************************************/
//camera preprocessing
//    return :
//        none 
void Pre_Camera() {
	cap.set(CAP_PROP_FRAME_WIDTH, 1280);    //Set camera width dpi
	cap.set(CAP_PROP_FRAME_HEIGHT, 360);    //Set camera height dpi
	cap.set(CAP_PROP_FPS, 30);              //set camera fps
}



/*****************************************/
//image preprocessing
//    interface :
//        (Mat) left lens image : Pic_Left_return()
//        (Mat) right lens image : Pic_Right_return()
class pre {
private:
	Mat Pic_All;                //original bi-camera image
	Mat Pic_Left;               //left devide
	Mat Pic_Right;              //right devide
public:
	pre(){}
	void pic_devide(Mat img);   //devide into two
	Mat Pic_Left_return();		//return left part image
	Mat Pic_Right_return();     //return right part image
	void show();                //show all parts of image
	~pre(){}
}Pre_process;

//devide into two
void pre::pic_devide(Mat img) {
	Pic_All = img.clone();
	Pic_Left = img(Rect(Point(0, 0), Point(img.cols / 2, img.rows))).clone();
	Pic_Right = img(Rect(Point(img.cols / 2, 0), Point(img.cols, img.rows))).clone();
}
//return left part image
Mat pre::Pic_Left_return() {
	return Pic_Left;
}
//return right part image
Mat pre::Pic_Right_return() {
	return Pic_Right;
}
//show all parts of image
void pre::show() {
	imshow("Left", Pic_Left);
	imshow("Right", Pic_Right);
	imshow("All", Pic_All);
}



int main() {
	Pre_Camera();
	Mat zong;

	while (1) {
		cap >> zong;
		Pre_process.pic_devide(zong);
		Pre_process.show();
		if (waitKey(1) > 0) break;
	}

	cap.release();
	return 0;
}

基于C++实现双目相机与激光雷达外参联合标定的算法源码+使用说明文档.zip 【资源说明】 【1】项目代码完整且功能都验证ok,确保稳定可靠运行后才上传。欢迎下载使用!在使用过程中,如有问题或建议,请及时私信沟通,帮助解答。 【2】项目主要针对各个计算机相关专业,包括计科、信息安全、数据科学与大数据技术、人工智能、通信、物联网等领域的在校学生、专业教师或企业员工使用。 【3】项目具有较高的学习借鉴价值,不仅适用于小白学习入门进阶。也可作为毕设项目、课程设计、大作业、初期项目立项演示等。 【4】如果基础还行,或热爱钻研,可基于此项目进行二次开发,DIY其他不同功能,欢迎交流学习。 【特别强调】 项目下载解压后,项目名字和项目路径不要用中文,建议解压重命名为英文名字后再运行!有问题私信沟通,祝顺利! 基于C++实现双目相机与激光雷达外参联合标定的算法源码+使用说明文档.zip 算法特点** - 利用libcbdetect进行棋盘格检测,并对原接口进行了相应修改,相比于OpenCV函数具有更高的鲁棒性。 - 对于标定板点云的分割,实现了类似Matlab LCC的立方体拟合。标定板点云的顶点提取采用了拟合边缘直线交点的方式,之后还进行了顶点的检验和优化。该部分主要基于pcl实现。 - 对于图像和点云中的标定板同时提取了点、面特征。参数优化过程中将点约束、面约束、双目反投影约束、闭环位姿约束统一在同一优化框架下,参数初值利用kabsch算法估计得到,该部分基于ceres实现。 /*当前算法精度不算高,仍在调试优化中,突出优势在于特征提取的鲁棒性较好*/ **使用方法** 本算法可以进行单目相机与激光雷达的外参标定和双目相机与激光雷达的外参标定,分别对应了samples/mono_lidar_calib.cpp,samples/stereo_lidar_calib.cpp。相机内参需要预先标定,推荐使用双目标定工具获得内参。 工程编译:mkdir build && cd build && cmake .. && make -j16 **单目相机与激光雷达外参标定** 首先,需要提供配置文件,以Matlab提供的hdl64线激光雷达数据为例(config/hdl64_mono.yaml), 需要提供的参数包括:标定类型、相机内参、图像和点云文件夹目录(文件名保持一致)、标定板参数、点云的虚拟边界、tform_l1_c1是用来对比的标定结果,这里提供的是Matlab LCC标定得到的参数。 标定命令:./samples/mono_lidar_calib -c ../config/hdl64_mono.yaml
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

StobestaR

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值