- 作者
- RoboMaster Vision Community
- 日期
- 2023/03/15
上一篇教程:线程与线程池管理 ↑
下一篇教程:串口通信模块 ↓
相关类 rm::MvVideoCapture, rm::HikVideoCapture.
1. 如何使用
使用前需安装相机驱动,详情参考:视觉库的配置与构建
1.1 初始化
MindVision
创建 MvVideoCapture 对象即可初始化相机,例如:
@ RETRIEVE_CV
使用 OpenCV 的 'cvtColor' 进行处理 Retrieve using cvtColor function in OpenCV
Definition: camera_define.h:39
@ RETRIEVE_SDK
使用官方 SDK 进行处理 Retrieve using official SDK
Definition: camera_define.h:38
@ GRAB_CONTINUOUS
连续采样 Continuous grabbing
Definition: camera_define.h:29
@ GRAB_SOFTWARE
软触发 Grab by software trigger
Definition: camera_define.h:30
HikRobot
创建 HikVideoCapture 对象即可初始化相机,例如:
第 1 个参数为 相机采集模式 ,见下表
采集方式 | 枚举标识符 | 含义 |
连续采集 | GRAB_CONTINUOUS | 连续触发相机,每次 grab 方法被执行后,均会触发相机的采样功能,一般调用 read 方法可间接调用 grab 。 |
软触发 | GRAB_SOFTWARE | 软件触发,需要手动设置触发帧,grab 方法只有在被设置触发帧之后的下一次执行有效,否则会阻塞以等待接收到触发帧,在 1s 内如果没有收到触发帧,则会被认为 grab 失败。 |
硬触发 | GRAB_HARDWARE | 硬件触发,通过向相机的航空接头传输高低电平信号来设置触发帧,信号的有效性可通过软件设置,例如设置高电平、低电平、上升边沿、下降边沿的一种为触发方式,grab 方法同软触发。 |
详细的触发方式
- 参见
第 2 个参数为 相机处理模式 ,见下表
处理模式 | 枚举标识符 | 十六进制数 | 含义 |
使用官方 SDK 进行处理 | RETRIEVE_SDK | 0x01 | 相机在捕获到 raw 图像后,采用 SDK 提供的函数进行处理,兼容性高,不依赖第三方库,但效率较低。 |
使用 cvtColor 进行处理 | RETRIEVE_CV | 0x02 | 第三方库采用 OpenCV,使用 cv::cvtColor 进行转码操作,对多核 CPU 设备性能较高。 |
使用 LUT 进行处理 | RETRIEVE_LUT | 0x10 | Look-Up Table 单通道像素映射表,使用 cv::LUT 将 raw 图像像素值作映射,再进行转码操作。 |
1.2 光学参数设置
1.2.1 曝光设置
手动/自动设置曝光
@ CAP_PROP_RM_AUTO_EXPOSURE
自动曝光 Automatic exposure
Definition: camera_define.h:54
@ CAP_PROP_RM_MANUAL_EXPOSURE
手动曝光 Manual exposure
Definition: camera_define.h:56
设置曝光值
@ CAP_PROP_RM_EXPOSURE
曝光值 Expusure
Definition: camera_define.h:58
1.2.2 白平衡设置
手动/自动设置白平衡
@ CAP_PROP_RM_MANUAL_WB
手动白平衡 Manual white balance
Definition: camera_define.h:57
@ CAP_PROP_RM_AUTO_WB
自动白平衡 Automatic white balance
Definition: camera_define.h:55
设置各通道增益,并生效(在手动设置白平衡模式下有效)
@ CAP_PROP_RM_WB_BGAIN
白平衡蓝色分量 Blue channel gain of white balance
Definition: camera_define.h:63
@ CAP_PROP_RM_WB_RGAIN
白平衡红色分量 Red channel gain of white balance
Definition: camera_define.h:61
@ CAP_PROP_RM_WB_GGAIN
白平衡绿色分量 Green channel gain of white balance
Definition: camera_define.h:62
1.2.3 其余光学参数设置
@ CAP_PROP_RM_SHARPNESS
锐度 Sharpness ratio
Definition: camera_define.h:66
@ CAP_PROP_RM_GAIN
模拟增益 Analog gain
Definition: camera_define.h:59
@ CAP_PROP_RM_SATURATION
饱和度 Saturation ratio
Definition: camera_define.h:65
@ CAP_PROP_RM_CONTRAST
对比度 Contrast ratio
Definition: camera_define.h:64
@ CAP_PROP_RM_GAMMA
Gamma 值 Gamma
Definition: camera_define.h:60
- 注解
- HikRobot 工业相机暂不支持修改 Gamma
1.3 处理参数设置
@ CAP_PROP_RM_TRIGGER_PERIOD
单次触发时多次采集的周期(微秒)The period of multiple collection for a single trigger (μs)
Definition: camera_define.h:73
@ CAP_PROP_RM_TRIGGER_COUNT
单次触发时的触发帧数 The number of frames in a single trigger
Definition: camera_define.h:72
@ CAP_PROP_RM_TRIGGER_DELAY
硬触发采集延迟(微秒)Hard trigger collection delay (μs)
Definition: camera_define.h:71
1.4 事件设置
@ CAP_ACT_RM_ONCE_WB
执行一次白平衡 Preform once white balance
Definition: camera_define.h:46
@ CAP_ACT_RM_SOFT_TRIGGER
执行软触发 Preform a software trigger
Definition: camera_define.h:47
2. para 参数加载
RMVL 提供了全局的相机参数对象: para::camera_param ,详情可参考类 para::CameraParam
3. 示例程序
在构建 RMVL 时,需开启 BUILD_EXAMPLES
选项(默认开启)
cmake -DBUILD_EXAMPLES=ON ..
make -j4
cd build
3.1 单相机
单相机例程,在 build 文件夹下执行以下命令
MindVision
HikRobot
相机按照连续采样、cvtColor
处理方式运行,程序运行中,cv::waitKey(1)
接受到 s
键被按下时,可将参数保存到 out_para.yml
文件中。
键入一次 Esc
可暂停程序,按其余键可恢复。键入两次 Esc
可退出程序。
3.2 多相机
多相机例程,在 build
文件夹下执行以下命令
MindVision
HikRobot
相机按照连续采样、cvtColor
处理方式运行,程序会枚举所有的相机设备,并可视化的显示出来,指定一个序列号来启动某一相机。
程序运行过程中,相机参数会自动从 out_para.yml
中加载,若没有则会按照默认值运行。
键入一次 Esc
可暂停程序,按其余键可恢复。键入两次 Esc
可退出程序。
3.3 相机录屏
相机录屏例程,在 build 文件夹下执行以下命令
MindVision
HikRobot
相机按照连续采样、cvtColor
处理方式运行,-o
可指定输出文件名,否则默认输出到 ts.avi
,例如
MindVision
bin/sample_mv_writer -o=aaa.avi
HikRobot
bin/sample_hik_writer -o=aaa.avi
程序运行过程中,相机参数会自动从 out_para.yml
中加载,若没有则会按照默认值运行。
3.4 相机标定
相机标定程序,在 build
文件夹下执行以下命令
MindVision
bin/sample_mv_calibration -w=<?> -h=<?> -s=<?> -d=<?> -n=<?>
HikRobot
bin/sample_hik_calibration -w=<?> -h=<?> -s=<?> -d=<?> -n=<?>
<?>
表示可调节,具体帮助可直接执行以下命令
MindVision
bin/sample_mv_calibration -help
HikRobot
bin/sample_hik_calibration -help
4. 使用 Demo
- 注解
- 下面以 MvVideoCapture 为例, HikVideoCapture 相机使用方式与之完全相同
连续采样:
int main()
{
Mat frame;
while(capture.read(frame))
{
imshow("frame", frame);
if (waitKey(1) == 27)
break;
}
}
软触发:
int main()
{
bool run = true;
thread th(
[&run]()
{
while (run)
{
this_thread::sleep_for(chrono::milliseconds(10));
}
});
Mat frame;
while (capture.read(frame))
{
imshow("frame", frame);
if (waitKey(1) == 27)
{
run = false;
break;
}
}
th.join();
}