opencv两种图像格式IplImage和Mat的透视变换

#include <stdlib.h>
#include <stdio.h>
#include <pthread.h>
#include <string>
#include <libgen.h>
#include "cv.h"
#include "highgui.h"
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
using namespace std;
using namespace cv;
void perTrans(IplImage* src,IplImage* dst,
        cv::Point poLeftTop,cv::Point poRightTop,cv::Point poLeftDown,cv::Point poRihtDown);
void MatPerTrans(Mat &src,Mat &dst,
        cv::Point poLeftTop,cv::Point poRightTop,cv::Point poLeftDown,cv::Point poRihtDown);

int main(int argc, char* argv[]){
    if (chdir(dirname(argv[0])) == -1)
        {
            printf("Edit the project dir unsuccessful!");
            return 1;    //将应用程序所在路径设成工作路径
        }
    string m_MyCameraRtspConfig = "/home/hitomi/picture/container/src/CN_Left_1_0_690_08-35-24_HAHU541537[9]45G1  .jpg";

    Mat src,dst;
    src = imread(m_MyCameraRtspConfig.c_str());
    MatPerTrans(src,dst,cv::Point(69,47),cv::Point(1616,0),cv::Point(-132,1364),cv::Point(2056,1364));
    imshow("trans",dst);
    waitKey(-1);
    return 0;
}

IplImage格式::


void perTrans(IplImage* src,IplImage* dst,cv::Point poLeftTop,cv::Point poRightTop,cv::Point poLeftDown,cv::Point poRihtDown){
    CvPoint2D32f srcTri[4], dstTri[4];
    CvMat* warp_mat = cvCreateMat (3, 3, CV_32FC1);
    srcTri[0].x = 0;
    srcTri[0].y = 0;
    srcTri[1].x = src->width - 1;
    srcTri[1].y = 0;
    srcTri[2].x = 0;
    srcTri[2].y = src->height - 1;
    srcTri[3].x = src->width - 1;
    srcTri[3].y = src->height - 1;
    //目标图像四个顶点的坐标
    dstTri[0].x = poLeftTop.x;//目标图像左上顶点位置调整
    dstTri[0].y = poLeftTop.y;
    dstTri[1].x = poRightTop.x;//右上顶点调整,1接近右侧
    dstTri[1].y = poRightTop.y;
    dstTri[2].x = poLeftDown.x;//目标图像左下顶点调整
    dstTri[2].y = poLeftDown.y;
    dstTri[3].x = poRihtDown.x;//目标图像右下顶点位置调整
    dstTri[3].y = poRihtDown.y;
    cvGetPerspectiveTransform (srcTri, dstTri, warp_mat);
    cvWarpPerspective (src, dst, warp_mat);
}

Mat格式::


void MatPerTrans(Mat &src,Mat &dst,cv::Point poLeftTop,cv::Point poRightTop,cv::Point poLeftDown,cv::Point poRihtDown){

    vector<Point2f> srcTri(4),dstTri(4);

    srcTri[0] = Point2f(0,0);
    srcTri[1] = Point2f(src.cols - 1,0);
    srcTri[2] = Point2f(0,src.rows - 1);
    srcTri[3] = Point2f(src.cols - 1,src.rows - 1);
    //目标图像四个顶点的坐标
    dstTri[0] = Point2f(poLeftTop.x,poLeftTop.y);
    dstTri[1] = Point2f(poRightTop.x,poRightTop.y);
    dstTri[2] = Point2f(poLeftDown.x,poLeftDown.y);
    dstTri[3] = Point2f(poRihtDown.x,poRihtDown.y);

    cv::Mat warp_mat = getPerspectiveTransform(srcTri, dstTri);
    cv::warpPerspective( src, dst, warp_mat,Size(src.cols,src.rows));

}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值