以下介绍下opencv实现图像去畸变的几种方式以及详细参数说明,含项目案例,含扩展的相关知识
① cv::fisheye::initUndistortRectifyMap 和 ② cv::initUndistortRectifyMap 都是 OpenCV 库中的函数,用于摄像机的畸变校正和图像的矫正。二者的区别在于,cv::fisheye::initUndistortRectifyMap 适用于鱼眼相机的畸变校正和图像矫正,而 cv::initUndistortRectifyMap 适用于普通相机的畸变校正和图像矫正。
具体来说,cv::fisheye::initUndistortRectifyMap 函数可以用于鱼眼相机的畸变校正和图像矫正,它的参数包括输入图像的大小、相机内参矩阵、畸变系数、旋转矩阵和投影矩阵等。函数的返回值是两个映射矩阵,可以用于后续的图像矫正操作。
而 cv::initUndistortRectifyMap 函数则可以用于普通相机的畸变校正和图像矫正,它的参数包括输入图像的大小、相机内参矩阵、畸变系数、旋转矩阵和投影矩阵等。函数的返回值同样是两个映射矩阵,可以用于后续的图像矫正操作。
需要注意的是,cv::fisheye::initUndistortRectifyMap 函数适用于鱼眼相机的畸变校正和图像矫正,但是它的运行速度相对较慢,因此在实际应用中需要根据具体情况选择合适的函数。cv::fisheye::initUndistortRectifyMap效果如下图:
去畸变前:

去畸变后:

另外,介绍一个效果比较好的扩展库:opencv_contrib。提供③ cv::omnidir::initUndistortRectifyMap接口实现去畸变效果,如下图:
去畸变前:

去畸变后:

以下则以方案 ③为例更为详细的说明一下:
- 具体参数(以下示例参数是1920*1080分辨率的)
{
"distcoeff":{
"distortMatrix":[
1.1445103126389398,
-1.5381069838860892,
-0.0002758264626124696,
0.0005343518274311642,
0
]
},
"extrinsic":{
"rotation":{
"w":-0.4503108282902849,
"x":0.54120891939059612,
"y":-0.531561574479537,
"z":0.47090907406145438
},
"translation":{
"x":4.6313664462542317,
"y":0.016680599912867258,
"z":0.85922674428639156
}
},
"intrinsic":{
// 以下"matrix"(相机内参需要根据分辨率的不同动态变化, 需要重新计算或者对鱼眼相机重新标定)
"height":1080,
"matrix":[
1559.081393096325,
-0.05575693563188319,
964.2708291230333,
0,
1557.3809973911518,
519.5834214435208,
0,
0,
&n

本文介绍了OpenCV中用于摄像机畸变校正的函数,包括cv::fisheye::initUndistortRectifyMap适用于鱼眼相机,cv::initUndistortRectifyMap适用于普通相机,以及opencv_contrib扩展库中的cv::omnidir::initUndistortRectifyMap。详细阐述了相关参数和代码实现,并展示了不同方法的效果。

401

被折叠的 条评论
为什么被折叠?



