OpenCV3_C++_Perspective()透视形式投影 实例

来源:互联网 发布:c语言ascii码 编辑:程序博客网 时间:2024/06/05 13:30

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;}

原图像

这里写图片描述

结果图像

这里写图片描述

原创粉丝点击