透视校正
来源:互联网 发布:淘宝爆款打造教程 编辑:程序博客网 时间:2024/06/10 10:19
#include "highgui.h"
#include <opencv2/opencv.hpp>
#include <opencv2/features2d/features2d.hpp>
#include<opencv2/nonfree/nonfree.hpp>
#include<opencv2/legacy/legacy.hpp>
#include<vector>
using namespace std;
using namespace cv;
int main()
{
//把原来的彩色图像变成灰度图
IplImage* img_origion = cvLoadImage("7.JPG");
IplImage *img = cvCreateImage(cvGetSize(img_origion),IPL_DEPTH_8U,1);
cvCvtColor(img_origion, img, CV_BGR2GRAY);
IplImage *correct = cvCloneImage(img);
//设置cvGoodFeaturesToTrack函数所需的参数,并提取img的特征点
IplImage* img_temp = cvCreateImage(cvGetSize(img), 32, 1);
IplImage* img_eigen = cvCreateImage(cvGetSize(img), 32, 1);
int count = 1000;//the maximum numbers of points;
CvPoint2D32f* corners = new CvPoint2D32f[count];
cvGoodFeaturesToTrack(img, img_eigen, img_temp, corners, &count, 0.1, 10);
for (int i = 0; i<count; i++)
{
cvLine(img, cvPoint(corners[i].x, corners[i].y),cvPoint(corners[i].x, corners[i].y), CV_RGB(255, 0, 0), 5);
}
cvNamedWindow("Features"); cvShowImage("Features", img);
cvSaveImage("Features.JPG", img);
cout << "Total feature points :" << count << endl;
//把在特征点的6、21、2、17分别设为矩形的四个角
CvPoint2D32f src[4]; //存储源图像中四个特征点
CvPoint2D32f dst[4]; //目标图像中的四个点
src[0].x = corners[6].x;
src[0].y = corners[6].y;
src[1].x = corners[21].x;
src[1].y = corners[21].y;
src[2].x = corners[2].x;
src[2].y = corners[2].y;
src[3].x = corners[17].x;
src[3].y = corners[17].y;
dst[0].x = 1;
dst[0].y = 1;
dst[1].x = 1;
dst[1].y = 480;
dst[2].x = 640;
dst[2].y = 1;
dst[3].x = 640;
dst[3].y = 480;
CvMat *warp_matrix = cvCreateMat(3, 3, CV_64FC1);//存放变换矩阵
cvGetPerspectiveTransform(src, dst, warp_matrix); //获得变换矩阵
//尝试原图的一个像素点是否能转换到期望的位置,来验证透视矩阵的有效性
Mat sample = (Mat_<double>(3, 1) << 467, 410, 1); //样例点,目标图像的(640,480)
Mat r = warp_matrix*sample; //变换矩阵乘以样例点,得到结果点的其次坐标
double s = r.at<double>(2, 0); //归一化尺度
cout << "\nresult...\n";
cout << ceil(r.at<double>(0, 0) / s) << endl; //别忘了除以 s 哦
cout << ceil(r.at<double>(1, 0) / s) << endl;
//开始对原来图像进行透视校正,并显示结果;
cvWarpPerspective(img, correct, warp_matrix);
cvNamedWindow("correct");
cvShowImage("correct", correct);
cvSaveImage("correct.JPG", correct);
cvWaitKey(0);
cvDestroyAllWindows();
cvReleaseImage(&img_origion);
cvReleaseImage(&correct);
cvReleaseImage(&img);
return 0;
}
0 0
- 透视校正
- OpenCVForUnity 透视校正,透视变换
- 透视校正插值
- 透视校正插值
- 透视校正插值
- 图像校正-透视变换
- 透视纹理校正公式推导
- 图像校正—透视变换
- openGL 透视校正插值
- 自动透视校正为四边形对象
- 透视变换畸变校正 双线性
- 图像预处理——透视变换(三):校正步骤
- 基于opencv的图像梯形畸变(透视)校正
- matlab练习程序(倾斜校正,透视变换)
- 【opencv】鱼眼图像畸变校正——透视变换
- 鱼眼图像畸变校正——透视变换
- matlab练习程序(倾斜校正,透视变换)
- 基于opencv的图像梯形畸变(透视)校正
- Python Module_openpyxl_处理Excel表格
- /bin/bash^M: bad interpreter: No such file or dire
- 套接字是什么?
- [Machine Learning] Neural Network
- java开发俄罗斯方块学习笔记 Day-8 配置
- 透视校正
- Core Data
- android 链接 javascript
- NSTimer 知识点记录
- win7 下ffmpeg release 版本崩溃问题
- Java NIO学习笔记之二-图解ByteBuffer
- 定时自动执行SQL存储过程(图文详解)
- 类中的静态成员小总结
- 抽象类与接口的区别: