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

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

原图像

这里写图片描述

结果图像

这里写图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值