Opencv3 的开发环境安装和导入请看
http://blog.csdn.net/sileixinhua/article/details/71175748
所有的OpenCV3_C++实例代码请看
https://github.com/sileixinhua/OpenCV_C-_tutorials
实例
#include "stdafx.h"
#include <opencv2/opencv.hpp>
#pragma comment(lib,"opencv_world330.lib")
//using namespace cv;
//using namespace std;
//去掉以上两行代码注释之后就可以不用在下面的代码中加上cv::和std::
//cv::为OpenCV的函数库
//std::为C++的标准函数库
int Perspective(){
cv::Mat src,dst;
//定义原图像和转换图像
cv::Point2f dstPoint[4];
//定义四个点为浮点型
int xMergin, yMergin;
//定义图像左边点的坐标
int pattern = 1;//0,1,2
//定义透视形式一共0,1,2三种。
const char* filename = "C:\\Code\\FirstOpenCVProgramming\\lena.jpg";
//目标图像地址
cv::imread(filename).copyTo(src);
if (src.empty()) {
throw("Faild open file.");
}
//图像读取成功或者失败判定
int x0 = src.cols / 4;
int x1 = (src.cols / 4) / 3;
int y0 = src.rows / 4;
int y1 = (src.rows / 4) / 3;
cv::Point2f srcPoint[4] = {
cv::Point(x0,y0),
cv::Point(x0,y1),
cv::Point(x1,y1),
cv::Point(x1,y0),
};
//定义透视点的坐标
switch (pattern) {
case 0:
xMergin = src.cols / 10;
yMergin = src.rows / 10;
dstPoint[0] = cv::Point(x0 + xMergin, y0 + yMergin);
dstPoint[1] = srcPoint[1];
dstPoint[2] = srcPoint[2];
dstPoint[3] = cv::Point(x1 - xMergin, y0 + yMergin);
break;
case 1:
xMergin = src.cols / 8;
yMergin = src.rows / 8;
dstPoint[0] = srcPoint[0];
dstPoint[1] = srcPoint[1];
dstPoint[2] = cv::Point(x1 - xMergin, y1 - yMergin);
dstPoint[3] = cv::Point(x1 - xMergin, y0 + yMergin);
break;
case 2:
xMergin = src.cols / 6;
yMergin = src.rows / 6;
dstPoint[0] = cv::Point(x0 + xMergin, y0 + yMergin);
dstPoint[1] = srcPoint[1];
dstPoint[2] = cv::Point(x1 - xMergin, y1 - yMergin);
dstPoint[3] = srcPoint[3];
break;
}
//三种图像的透视方向
cv::Mat perspectiveMmat = cv::getPerspectiveTransform(srcPoint,dstPoint);
cv::warpPerspective(src,dst,perspectiveMmat,src.size(),cv::INTER_CUBIC);
//图像透视化的函数
cv::imshow("src",src);
cv::imshow("dst", dst);
cv::imwrite("C:\\Code\\FirstOpenCVProgramming\\Perspective.jpg", dst);
cv::waitKey();
}
int main()
{
//以下的方法如果想运行,直接把前头的注释去掉即可
//运行代码的时候请改掉filename里的地址
//我的opencv是安装在C盘目录下
//一些目录地址请自行修改一下
Perspective(); //透视形式的投影
return 0;
}