相机模块的基本使用,包括初始化、参数设置以及运行示例
- 作者
- 赵曦
- 日期
- 2023/03/15
上一篇教程:工业自动化通信协议 OPC UA ↑
下一篇教程:光源控制器 ↓
相关类
1. 如何使用
使用前需安装相机驱动,详情参考:构建并安装 RMVL ,下面以 MvCamera 为例介绍如何使用相机模块,其余相机操作完全一致。
1.1 初始化
创建 MvCamera 对象即可初始化相机:
C++
@ SDK
使用官方 SDK 进行处理
定义 camutils.hpp:55
@ Continuous
连续采样
定义 camutils.hpp:36
static CameraConfig create(Args &&...modes)
创建相机初始化配置模式
定义 camutils.hpp:72
Python
cam_cfg.grab_mode = rm.GrabMode.Continuous
cam_cfg.retrieve_mode = rm.RetrieveMode.SDK
相机初始化配置模式
定义 camutils.hpp:60
第 1 个参数为 相机初始化模式 ,包含
- 相机外部触发通道
- 相机采集模式
- 相机句柄创建方式
- 相机数据处理模式
4 个待配置的数据,见下表
详细的触发方式
- 参见
1.2 光学属性设置
1.2.1 曝光设置
手动/自动设置曝光
C++
@ CAMERA_MANUAL_EXPOSURE
手动曝光
定义 camutils.hpp:99
@ CAMERA_AUTO_EXPOSURE
自动曝光
定义 camutils.hpp:98
Python
capture.set(rm.CAMERA_MANUAL_EXPOSURE)
capture.set(rm.CAMERA_AUTO_EXPOSURE)
设置曝光值
C++
@ CAMERA_EXPOSURE
曝光值
定义 camutils.hpp:103
Python
capture.set(rm.CAMERA_EXPOSURE, 600)
1.2.2 白平衡设置
手动/自动设置白平衡
C++
@ CAMERA_AUTO_WB
自动白平衡
定义 camutils.hpp:101
@ CAMERA_MANUAL_WB
手动白平衡
定义 camutils.hpp:102
Python
capture.set(rm.CAMERA_MANUAL_WB)
capture.set(rm.CAMERA_AUTO_WB)
设置各通道增益,并生效(在手动设置白平衡模式下有效)
C++
@ CAMERA_WB_BGAIN
白平衡蓝色分量
定义 camutils.hpp:108
@ CAMERA_WB_GGAIN
白平衡绿色分量
定义 camutils.hpp:107
@ CAMERA_WB_RGAIN
白平衡红色分量
定义 camutils.hpp:106
Python
capture.set(rm.CAMERA_WB_RGAIN, 102)
capture.set(rm.CAMERA_WB_GGAIN, 101)
capture.set(rm.CAMERA_WB_BGAIN, 100)
1.2.3 其余光学参数设置
C++
@ CAMERA_SATURATION
饱和度
定义 camutils.hpp:110
@ CAMERA_CONTRAST
对比度
定义 camutils.hpp:109
@ CAMERA_GAMMA
Gamma 值
定义 camutils.hpp:105
@ CAMERA_SHARPNESS
锐度
定义 camutils.hpp:111
@ CAMERA_GAIN
模拟增益
定义 camutils.hpp:104
Python
capture.set(rm.CAMERA_GAIN, 64)
capture.set(rm.CAMERA_GAMMA, 80)
capture.set(rm.CAMERA_CONTRAST, 120)
capture.set(rm.CAMERA_SATURATION, 100)
capture.set(rm.CAMERA_SHARPNESS, 100)
- 注解
- Hik 工业相机暂不支持修改 Gamma
1.3 触发属性设置
C++
@ CAMERA_TRIGGER_SOFT
执行软触发
定义 camutils.hpp:119
@ CAMERA_ONCE_WB
执行单次白平衡
定义 camutils.hpp:120
@ CAMERA_TRIGGER_PERIOD
单次触发时多次采集的周期(微秒 )
定义 camutils.hpp:118
@ CAMERA_TRIGGER_DELAY
硬触发采集延迟(微秒 )
定义 camutils.hpp:116
@ CAMERA_TRIGGER_COUNT
单次触发时的触发帧数
定义 camutils.hpp:117
Python
capture.set(rm.CAMERA_TRIGGER_DELAY, 1000)
capture.set(rm.CAMERA_TRIGGER_COUNT, 5)
capture.set(rm.CAMERA_TRIGGER_PERIOD, 100)
capture.set(rm.CAMERA_ONCE_WB)
capture.set(rm.CAMERA_TRIGGER_SOFT)
2. para 参数加载
RMVL 提供了全局的相机参数对象: para::camera_param ,详情可参考类 para::CameraParam
3. 示例程序
在构建 RMVL 时,需开启 BUILD_EXAMPLES
选项(默认开启)
cmake -DBUILD_EXAMPLES=ON ..
cmake --build . --parallel 4
cd build
3.1 单相机
单相机例程,在 build 文件夹下执行以下命令
相机按照连续采样、cvtColor
处理方式运行,程序运行中,cv::waitKey(1)
接受到 s
键被按下时,可将参数保存到 out_para.yml
文件中。
键入一次 Esc
可暂停程序,按其余键可恢复。键入两次 Esc
可退出程序。
3.2 多相机
多相机例程,在 build
文件夹下执行以下命令
相机按照连续采样、cvtColor
处理方式运行,程序会枚举所有的相机设备,并可视化的显示出来,指定一个序列号来启动某一相机。
程序运行过程中,相机参数会自动从 out_para.yml
中加载,若没有则会按照默认值运行。
键入一次 Esc
可暂停程序,按其余键可恢复。键入两次 Esc
可退出程序。
3.3 相机录屏
相机录屏例程,在 build 文件夹下执行以下命令
相机按照连续采样、cvtColor
处理方式运行,-o
可指定输出文件名,否则默认输出到 ts.avi
,例如
bin/rmvl_mv_writer -o=aaa.avi
程序运行过程中,相机参数会自动从 out_para.yml
中加载,若没有则会按照默认值运行。
3.4 相机标定
MvCamera 相机自动标定程序,在 build
文件夹下执行以下命令
bin/rmvl_mv_auto_calib -w=<?> -h=<?> -s=<?> -d=<?> -n=<?>
<?>
表示可调节,具体帮助可直接执行以下命令
bin/rmvl_mv_calibration -help
另外还有相机手动标定程序,可执行以下命令
4. 使用 Demo
4.1 连续采样
C++
#include <opencv2/highgui.hpp>
int main()
{
cv::Mat frame;
while(capture.read(frame))
{
cv::imshow("frame", frame);
if (cv::waitKey(1) == 27)
break;
}
}
@ OpenCV
使用 OpenCV 的 'cvtColor' 进行处理
定义 camutils.hpp:54
Python
import rm
import cv2
cam_cfg.grab_mode = rm.GrabMode.Continuous
cam_cfg.retrieve_mode = rm.RetrieveMode.OpenCV
while True:
res, frame = capture.read()
if not res:
break
cv2.imshow("frame", frame)
if cv2.waitKey(1) == 27:
break
4.2 软触发
C++
#include <opencv2/highgui.hpp>
int main()
{
bool run = true;
std::thread th([&run]() {
while (run)
{
Timer::sleep_for(10);
}
});
cv::Mat frame;
while (capture.read(frame))
{
cv::imshow("frame", frame);
if (cv::waitKey(1) == 27)
{
run = false;
break;
}
}
th.join();
}
@ Software
软触发
定义 camutils.hpp:37
Python