admin管理员组

文章数量:1130349

Opencv3 的开发环境安装和导入请看

http://blog.csdn/sileixinhua/article/details/71175748

所有的OpenCV3_C++实例代码请看

https://github/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;
}

原图像

结果图像

Opencv3 的开发环境安装和导入请看

http://blog.csdn/sileixinhua/article/details/71175748

所有的OpenCV3_C++实例代码请看

https://github/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;
}

原图像

结果图像

本文标签: 透视实例形式OpenCV3Cperspective