OpenCV4每日一练day10:图像校正
一.OpenCV提供的函数
二.校正
准备文件:
运行(GIF动图)
附代码1(上图使用):
#include <opencv2\opencv.hpp>
#include <iostream>
#include <fstream>
#include <vector>using namespace std;
using namespace cv;//用undistort()函数直接计算校正图像
void undist(vector<Mat> imgs, //所有原图像向量Mat cameraMatrix, //计算得到的相机内参Mat distCoeffs, //计算得到的相机畸变系数vector<Mat> &undistImgs) //校正后的输出图像
{for (int i = 0; i < imgs.size(); i++){Mat undistImg;undistort(imgs[i], undistImg, cameraMatrix, distCoeffs);undistImgs.push_back(undistImg);}
}int main()
{//读取所有图像vector<Mat> imgs;string imageName;ifstream fin("calibdata.txt");while (getline(fin, imageName)){Mat img = imread(imageName);imgs.push_back(img);}//输入前文计算得到的内参矩阵Mat cameraMatrix = (Mat_<float>(3, 3) << 532.016297, 0, 332.172519,0, 531.565159, 233.388075,0, 0, 1);//输入前文计算得到的内参矩阵Mat distCoeffs = (Mat_<float>(1, 5) << -0.285188, 0.080097, 0.001274, -0.002415, 0.106579);vector<Mat> undistImgs;//存放着去畸变图像的向量//Size imageSize;//去畸变图像的尺寸//imageSize.width = imgs[0].cols;//imageSize.height = imgs[0].rows;//上一节课已经把尺寸搞定//使用initUndistortRectifyMap()函数和remap()函数校正图像//initUndistAndRemap(imgs, cameraMatrix, distCoeffs, imageSize, undistImgs);//用undistort()函数直接计算校正图像,下一行代码取消注释即可undist(imgs, cameraMatrix, distCoeffs, undistImgs);//显示校正前后的图像for (int i = 0; i < imgs.size(); i++){string windowNumber = to_string(i);imshow("未校正图像" + windowNumber, imgs[i]);imshow("校正后图像" + windowNumber, undistImgs[i]);waitKey(0);destroyWindow("未校正图像" + windowNumber);destroyWindow("校正后图像" + windowNumber);}waitKey(0);return 0;
}
附代码2:
#include <opencv2\opencv.hpp>
#include <iostream>
#include <fstream>
#include <vector>using namespace std;
using namespace cv;//使用initUndistortRectifyMap()函数和remap()函数校正图像
void initUndistAndRemap(vector<Mat> imgs, //所有原图像向量Mat cameraMatrix, //计算得到的相机内参Mat distCoeffs, //计算得到的相机畸变系数Size imageSize, //图像的尺寸vector<Mat> &undistImgs) //校正后的输出图像
{//计算映射坐标矩阵Mat R = Mat::eye(3, 3, CV_32F);Mat mapx = Mat(imageSize, CV_32FC1);Mat mapy = Mat(imageSize, CV_32FC1);initUndistortRectifyMap(cameraMatrix, distCoeffs, R, cameraMatrix, imageSize, CV_32FC1, mapx, mapy);//校正图像for (int i = 0; i < imgs.size(); i++){Mat undistImg;remap(imgs[i], undistImg, mapx, mapy, INTER_LINEAR);undistImgs.push_back(undistImg);}
}//用undistort()函数直接计算校正图像
void undist(vector<Mat> imgs, //所有原图像向量Mat cameraMatrix, //计算得到的相机内参Mat distCoeffs, //计算得到的相机畸变系数vector<Mat> &undistImgs) //校正后的输出图像
{for (int i = 0; i < imgs.size(); i++){Mat undistImg;undistort(imgs[i], undistImg, cameraMatrix, distCoeffs);undistImgs.push_back(undistImg);}
}int main()
{//读取所有图像vector<Mat> imgs;string imageName;ifstream fin("calibdata.txt");while (getline(fin, imageName)){Mat img = imread(imageName);imgs.push_back(img);}//输入前文计算得到的内参矩阵Mat cameraMatrix = (Mat_<float>(3, 3) << 532.016297, 0, 332.172519,0, 531.565159, 233.388075,0, 0, 1);//输入前文计算得到的内参矩阵Mat distCoeffs = (Mat_<float>(1, 5) << -0.285188, 0.080097, 0.001274, -0.002415, 0.106579);vector<Mat> undistImgs;//存放着去畸变图像的向量Size imageSize;//去畸变图像的尺寸imageSize.width = imgs[0].cols;imageSize.height = imgs[0].rows;//使用initUndistortRectifyMap()函数和remap()函数校正图像initUndistAndRemap(imgs, cameraMatrix, distCoeffs, imageSize, undistImgs);//用undistort()函数直接计算校正图像,下一行代码取消注释即可//undist(imgs, cameraMatrix, distCoeffs, undistImgs);//显示校正前后的图像for (int i = 0; i < imgs.size(); i++){string windowNumber = to_string(i);imshow("未校正图像" + windowNumber, imgs[i]);imshow("校正后图像" + windowNumber, undistImgs[i]);}waitKey(0);return 0;
}
OpenCV4每日一练day10:图像校正相关推荐
- OpenCV4每日一练day13:双目相机校正
一.双目相机校正说明--<OpenCV4快速入门> 二.双目相机校正 文件准备: 运行结果: 附代码: #include <opencv2\opencv.hpp> #inclu ...
- OpenCV4每日一练day5:图像读取、显示与保存
一.图像加载(读取) 二.图像显示 三.图像保存 四.例: 运行结果: 附上例代码: #include<opencv2\opencv.hpp> #include<iostream&g ...
- OpenCV4每日一练day12:双目相机标定
一.标定说明--<OpenCV4快速入门> 二.标定 文件准备: 运行结果: <OpenCV4快速入门>中的运行结果: 附上例代码: #include <opencv2\ ...
- OpenCV4每日一练day11:单目位姿估计
一.单目位姿估计 根据相机成像模型,如果已知相机的内参矩阵.世界坐标系中若干空间点的三维坐标和空间点在图像中投影的二维坐标,那么可以计算出世界坐标系到相机坐标系的旋转向量和平移向量.如图所示,当知 ...
- OpenCV4每日一练day8:模型投影函数projectPoints()
OpenCV4中提供了projectPoints()函数用于计算世界坐标系中的三维点投影到像素坐标系中的二维坐标. 例:程序参数来自下述图片 运行结果: 附上例代码: #include <o ...
- OpenCV4每日一练day14:光流法跟踪移动物体
一.稠密光流法跟踪移动物体 例1 #include <opencv2/opencv.hpp> #include <iostream>using namespace cv; us ...
- OpenCV4每日一练day9:单目相机标定
一.单目相机模型 二.OpenCV提供的相关函数 三.标定 准备文件: 运行(GIF动图) 最终标定结果: 附代码: #include <opencv2\opencv.hpp> #incl ...
- OpenCV4每日一练day7:视频加载、摄像头调用、视频文件保存
一.视频加载(读取)/摄像头调用使用的是同一个函数:VideoCapture( ) get函数使用,如video.get(CAP_PROP_FOURCC) 视频实时显示与播放:video>> ...
- OpenCV4每日一练day6:Image Watch的使用
一.Image Watch的下载与安装 step1: step2: step3: step4: step5: step6: 二.Image Watch使用示例 step1:设置断点,不会执行圆点所在行 ...
最新文章
- Cisco交换机解决网络蠕虫病毒***问题
- 将不确定变为确定~异常被抛出的顺序
- 国际C语言乱码大赛(IOCCC)经典之作
- 为什么采用4~20mA的电流来传输模拟量?
- Linux快速入门02-文件系统管理
- BloomFilter算法概述
- 初始化列表和构造函数内赋值的区别
- java 十六进制数的转换
- 机器学习算法GBDT的面试要点总结-上篇
- spring-kafka广播模式配置_交换机为什么要划分vlan?交换机如何配置
- ab 测试工具(Linux Windows)
- 重置计算机的本地策略,手把手教你win10系统本地组策略重置恢复默认的详细方案...
- 感性电路电流计算_三相交流电怎么计算电功率?三相交流电功率计算公式
- 计算机配色在纺织中的应用,计算机配色在印染行业的应用
- word插入分隔符的方法
- ftps软件android,透视相机软件ftp
- 【笔记】wincap收集并统计网络流量
- [2012-08-21] HTTPC 的使用
- SpringMVC总结-SpringMVC的运行流程以及简单运用
- Idrac卡偶尔不可用处理办法
热门文章
- 基于JAVA+SpringMVC+Mybatis+MYSQL的宠物商城管理系统
- 基于JAVA+SpringMVC+Mybatis+MYSQL的医院管理系统
- [Luogu 3835]【模板】可持久化平衡树
- YUV采样及存储格式
- vs2015社区版不支持installshield
- 字典dictionary
- MapReduce三种join实例分析
- leetcode----------Excel Sheet Column Number
- 存储过程 触发器 约束
- html之CSS设计(文本、边框、列表标签、display设置、内外边距)