5_相机标定_4UVC相机图像校准

30万像素UVC相机拍摄图片,与海康600万像素相机无法相比,但这个更贴近入门。想起我们一个大三学弟带大一的:有些小同志没电脑但是有手机,然后给他们手机上整了一个软件,在手机上编C语言程序。属实震惊了我,只要思想不滑坡,办法总比困难多。

有了cameraMatrix和distCoeffs这两个相机内参后,我们可以做什么?

之前600万的工业相机几乎看不到图像畸变,所以买了一个UVC摄像机。在linux下还没驱动起来,在Windows上取得图片。一般垂直安装会产生"桶形畸变",倾斜安装会产生"梯形畸变"。

一、校准效果

未校准前:

undistort()校准效果:

initUndistortRectifyMap()和remap()校准效果:

校准程序:

//对图片进行校正

php 复制代码
cv::Mat imageSource = cv::imread("../CalibrateCamera/data/uvc/5.bmp");


        cv::Mat newimage = imageSource.clone();


        cv::Mat mapx = cv::Mat(imageSize, CV_32FC1);
        cv::Mat mapy = cv::Mat(imageSize, CV_32FC1);
        cv::Mat R = cv::Mat::eye(3, 3, CV_32F);
        cv::initUndistortRectifyMap(cameraMatrix,distCoeffs,R,cameraMatrix,imageSize,CV_32FC1,mapx,mapy);
        cv::remap(imageSource, newimage, mapx, mapy, cv::INTER_LINEAR);
//        undistort(imageSource, newimage, cameraMatrix, distCoeffs);    


        cv::imwrite("../CalibrateCamera/data/new/new.bmp", newimage);

二、函数介绍

方法一:使用initUndistortRectifyMap和remap两个函数配合实现。

initUndistortRectifyMap用来计算畸变映射,remap把求得的映射应用到图像上。

properties 复制代码
void initUndistortRectifyMap( 
InputArray cameraMatrix,
InputArraydistCoeffs,                           
InputArray R,
InputArray newCameraMatrix,                            
Size size,
int m1type,
OutputArray map1,
OutputArray map2);

第一个参数cameraMatrix为之前求得的相机的内参矩阵;

第二个参数distCoeffs为之前求得的相机畸变矩阵;

第三个参数R,可选的输入,是第一和第二相机坐标之间的旋转矩阵;

第四个参数newCameraMatrix,输入的校正后的3X3摄像机矩阵;

第五个参数size,摄像机采集的无失真的图像尺寸;

第六个参数m1type,定义map1的数据类型,可以是CV_32FC1或者CV_16SC2;

第七个参数map1和第八个参数map2,输出的X/Y坐标重映射参数;

properties 复制代码
void remap( InputArray src,
            OutputArray dst,                         
            InputArray map1,
            InputArray map2,                         
            int interpolation,
            int borderMode=BORDER_CONSTANT,
            const Scalar& borderValue=Scalar());

第一个参数src,输入参数,代表畸变的原始图像;

第二个参数dst,矫正后的输出图像,跟输入图像具有相同的类型和大小;

第三个参数map1和第四个参数map2,X坐标和Y坐标的映射;

第五个参数interpolation,定义图像的插值方式;

第六个参数borderMode,定义边界填充方式;

properties 复制代码
void undistort( InputArray src,
                OutputArray dst,                             
                InputArray cameraMatrix,                             
                InputArray distCoeffs,                             
                InputArray newCameraMatrix=noArray() );

第一个参数src,输入参数,代表畸变的原始图像;

第二个参数dst,矫正后的输出图像,跟输入图像具有相同的类型和大小;

第三个参数cameraMatrix为之前求得的相机的内参矩阵;

第四个参数distCoeffs为之前求得的相机畸变矩阵;

第五个参数newCameraMatrix,默认跟cameraMatrix保持一致;

方法一相比方法二执行效率更高一些,推荐使用。

欢迎关注,记录学习过程。

相关推荐
浪里镖客1 天前
RM65B睿尔曼机械臂与realsense d4354i相机眼在手外的手眼标定
数码相机
长江后浪博客1 天前
陶瓷盘UV喷墨印刷中的Z轴高度测量与防碰撞技术方案
数码相机·uv·陶瓷盘uv打印·uv喷墨印刷·z轴测高·喷头防碰撞·激光位移传感器
挽安学长3 天前
浅谈一下,伟财工程水印相机的特点及优势!
数码相机
蓝宝石的傻话4 天前
因为MiBeeNVR,决定接 onvif-go 自己管理并重构
数码相机·重构·golang
格林威4 天前
C# 相机Burst模式图像采集:使用相机内存配合OpenCvSharp和Halcon实现短时间的高速采集的方法
开发语言·人工智能·数码相机·计算机视觉·c#·视觉检测·工业相机
长江后浪博客4 天前
黑色滴灌带三角结构视觉检测光源设计方案——200mm高角度环光 + 低角度条形暗场补光
人工智能·数码相机·视觉检测·机器视觉·光源设计·暗场补光·环形光
长江后浪博客5 天前
陶瓷浮雕盘印刷视觉定位方案:8K线扫相机 + 暗场光源 + 旋转平台
人工智能·数码相机·机器视觉·视觉定位·线扫相机·暗场光源·陶瓷印刷
爱分享的康康5 天前
破解座舱数采五大痛点:DMS/OMS多路相机数采工程方案
数码相机·自动驾驶
k4m7v2pz6 天前
Godot 4 窗口拉伸黑边与变形:stretch 配置全解析
数码相机·游戏引擎·godot·2d游戏·黑边·stretch·画面比例
成都佳洋光电科技有限公司6 天前
一文了解工业相机是怎么实现触发的?
数码相机·工业相机·工业镜头·短波红外