湘潭网站建设 技精磐石网络,网站运营问题,美食网站制作代码,湖北网站排名优化若该文为原创文章#xff0c;转载请注明原文出处 本文章博客地址#xff1a;https://blog.csdn.net/qq21497936/article/details/136293833 各位读者#xff0c;知识无穷而人力有穷#xff0c;要么改需求#xff0c;要么找专业人士#xff0c;要么自己研究 红胖子(红模仿…若该文为原创文章转载请注明原文出处 本文章博客地址https://blog.csdn.net/qq21497936/article/details/136293833 各位读者知识无穷而人力有穷要么改需求要么找专业人士要么自己研究 红胖子(红模仿)的博文大全开发技术集合包含Qt实用技术、树莓派、三维、OpenCV、OpenGL、ffmpeg、OSG、单片机、软硬结合等等持续更新中…点击传送门
OpenCV开发专栏点击传送门
上一篇《OpenCV开发笔记七十四OpenCV3.4.1ffmpeg3.4.8交叉编译移植到海思平台Hi35xx平台》 下一篇持续补充中… 前言 相机标定重映射可以进行插值映射从而矫正图像这是一种方法也有矩阵映射方法本篇使用重映射方式解说畸变矫正的计算原理。 Demo 横向纵向区域固定拉伸 横向纵向拉伸 右下角拉伸 相机畸变矫正 标定相机需要做两件事
纠正畸变的影响根据图像重构三位场景
纠正畸变的影响 Opencv提供了可以直接使用的矫正算法即通过输入原始图像和由函数cv::calibrateCamera()得到的畸变系数生成校正后的图像。注意这里可使用用cv::undistort()使用该算法直接完成所需任务也可以使用函数cv::iniitUndistorRectifyMap()和cv::remap()来更有效的处理。 矫正映射remap畸变映射 当进行图像矫正时必须指定输入图像的每个像素在输出图像中移动到的位置成为“矫正映射”畸变映射。
双通道浮点数表示方式 N x M的矩阵A中重映射由双通道浮点数的N x M的矩阵B表示对于图像A中的任意一点aPoint(i, j)映射为b1Point(i’, j’)和b2Point(i’, j’)在A中假设i2j3那么假设重映射之后4.55.5在B1中b1Point(i’, j’)值为4.5b2Point(i’, j’)值为5.5由于坐标是浮点数那么需要插值得到整数位置以及中间过渡的区域颜色平滑处理。
双矩阵浮点数表示方式 双矩阵浮点数表示N x M的矩阵A中重映射由一对N x M的矩阵B和C描述这里所有的N x M矩阵都是单通道浮点矩阵在A中的点aPoint(i, j)重映射矩阵B中的点bPoint(i,j)存储了重映射后的i’ 映射后的i坐标 重映射矩阵C中的点cPoint(i,j)存储了重映射后的j’映射后的j坐标。
定点表示方式 映射由双通道有符号整数矩阵即CV_16SC2类型表示。该方式与双通道浮点数表示方式相同但使用此格式要快得多笔者理解由浮点数插值改为整数插值会要快一些但是肯定双通道浮点数的表示方式图像效果会稍微好一些。 remap核心关键 在于得到插值的坐标系来映射新位置的x和y位置要渐近等所以本方法的核心关键在于得到标定后的矩阵得到映射矩阵的方式可以自己写算法也可以使用其他方式后续文章继续深入这块。 函数原型
void remap( InputArray src,OutputArray dst,InputArray map1,InputArray map2,int interpolation,int borderMode BORDER_CONSTANT,const Scalar borderValue Scalar());参数一InputArray类型的src一般为cv::Mat;参数二OutputArray类型的dst目标图像。它的大小与map1相同类型与src相同。参数三InputArray类型的map1它有两种可能的表示对象表示点xy的第一个映射或者表示CV_16SC2 , CV_32FC1 或CV_32FC2类型的x值。参数四InputArray类型的map2它也有两种可能的表示对象而且他是根据map1来确定表示哪种对象。若map1表示点xy时这个参数不代表任何值否则表示CV_16UC1 , rCV_32FC1类型的y值第二个值。参数五int类型的interpolation使用的插值方法参数六int类型的borderMode边界处理方式参数七Scalar类型的borderValue重映射后离群点的背景需要broderMode设置为BORDER_CONSTRANT时才有效。离群点当图片大小为400x300那么对应的map1和map2范围为0399、0299小于0或者大于299的则为离散点使用该颜色填充; Demo源码
void OpenCVManager::testRemap2()
{std::string srcFilePath D:/qtProject/openCVDemo/openCVDemo/modules/openCVManager/images/25.jpg;// 步骤一读取文件cv::Mat srcMat cv::imread(srcFilePath);// 缩放一下int width 400;int height 400;cv::resize(srcMat, srcMat, cv::Size(width, height));// 步骤二映射矩阵cv::Mat mapX;cv::Mat mapY;mapX.create(srcMat.size(), CV_32FC1);mapY.create(srcMat.size(), CV_32FC1);// 算法这里400x400将0~100放大至0~200将100~400映射为200~400// 算法这里400x400将0~100放大至0~200将100~400映射为200~400
#if 0for(int row 0; row srcMat.rows; row){for(int col 0; col srcMat.cols; col){
// if(true)if(col 200){mapX.atfloat(row, col) static_castfloat(col * 1.0f / 2);}else{mapX.atfloat(row, col) static_castfloat(100 (col - 200) * 1.0f / 2 * 3);}
// if(true)if(row 200){mapY.atfloat(row, col) static_castfloat(row * 1.0f / 2);}else{mapY.atfloat(row, col) static_castfloat(100 (row - 200) * 1.0f / 2 * 3);}}}
#endif
#if 0for(int row 0; row srcMat.rows; row){for(int col 0; col srcMat.cols; col){// 这里是 0~200 缩放为 0~100 缩小 // 比例系数if(col 0){mapX.atfloat(row, col) static_castfloat(col);}else if(col 200){mapX.atfloat(row, col) static_castfloat(col * 1.0f / 2 * (col * 1.0f / 199));}else{mapX.atfloat(row, col) static_castfloat(col * 1.0f / 2 * (col * 1.0f / 199));}if(row 0){mapY.atfloat(row, col) static_castfloat(row);}else if(row 200){mapY.atfloat(row, col) static_castfloat(row * 1.0f / 2 * (row * 1.0f / 199));}else{mapY.atfloat(row, col) static_castfloat(row * 1.0f / 2 * (row * 1.0f / 199));}}}
#endif
#if 1for(int row 0; row srcMat.rows; row){for(int col 0; col srcMat.cols; col){// 比例系数 0~1.0400~800/400mapX.atfloat(row, col) static_castfloat(col * ((col 1 400) * 1.0f / 800));mapY.atfloat(row, col) static_castfloat(row * ((row 1 400) * 1.0f / 800));}}
#endifcv::Mat dstMat;cv::remap(srcMat,dstMat,mapX,mapY,CV_INTER_LINEAR,cv::BORDER_CONSTANT,cv::Scalar(255, 0, 0));cv::imshow(1, srcMat);cv::imshow(_windowTitle.toStdString(), dstMat);cv::waitKey(0);
}对应工程模板v1.66.0 上一篇《OpenCV开发笔记七十四OpenCV3.4.1ffmpeg3.4.8交叉编译移植到海思平台Hi35xx平台》 下一篇持续补充中… 本文章博客地址https://blog.csdn.net/qq21497936/article/details/136293833