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