文章介绍一种双目摄像头左右镜头图像读取方法
摄像头型号: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;
}