opencv 图像转换

#include <cv.h>
#include <highgui.h>
int main()
{
    CvPoint2D32f srcTri[3], dstTri[3];
    CvMat* rot_mat = cvCreateMat(2, 3, CV_32FC1);
    CvMat* warp_mat = cvCreateMat(2, 3, CV_32FC1);
    IplImage *src, *dst;
    src = cvLoadImage("5.jpg", 1);
    
    dst = cvCloneImage(src);
    dst->origin = src->origin;
    cvZero(dst);

    srcTri[0].x = 0;
    srcTri[0].y = 0;
    srcTri[1].x = src->width - 1.0;
    srcTri[1].y = 0;
    srcTri[2].x = 0;
    srcTri[2].y = src->height - 1.0;
    dstTri[0].x = src->width*0.0;
    dstTri[0].y = src->height*0.33;
    dstTri[1].x = src->width *0.85;
    dstTri[1].y = src->height *0.25;
    dstTri[2].x = src->width *0.15;
    dstTri[2].y = src->height*0.7;
    cvGetAffineTransform(srcTri, dstTri, warp_mat);
    //将其转换成具体的变换矩阵
    cvWarpAffine(src, dst, warp_mat);
    //将源图像通过warp_mat映射到目标图像
    cvNamedWindow("show", 1);
    cvShowImage("show", dst);
    cvNamedWindow("main", 1);
    cvShowImage("main", src);
    cvCopy(dst, src);
    CvPoint2D32f center = cvPoint2D32f(src->width / 2,src->height / 2); //中心点
    double angle = -50.0;
    double scale = 0.6;
    cv2DRotationMatrix(center, angle, scale, rot_mat);    //计算围绕点的旋转的映射矩阵和一个可选择的尺度
    //参数分别表示 旋转中心 角度  缩放尺度  输出映射
    cvWarpAffine(src, dst, rot_mat);
    //映射
    cvNamedWindow("show1", 1);
    cvShowImage("show1", dst);
    cvWaitKey();
    cvReleaseImage(&dst);
    cvReleaseImage(&src);
    cvDestroyAllWindows();
    return 0;
}

2.

#include <cv.h>
#include <highgui.h>
int main()
{
    CvPoint2D32f srcQuad[4], dstQuad[4];
    CvMat* warp_matrix = cvCreateMat(3, 3, CV_32FC1); //创建矩阵
    IplImage *src, *dst;
    src = cvLoadImage("5.jpg", 1);
    dst = cvCloneImage(src);
    dst->origin = src->origin;
    cvZero(dst);
    srcQuad[0].x = 0;
    srcQuad[0].y = 0;
    srcQuad[1].x = src->width - 1;
    srcQuad[1].y = 0;
    srcQuad[2].x = 0;
    srcQuad[2].y = src->height - 1;
    srcQuad[3].x = src->width - 1;
    srcQuad[3].y = src->height - 1;
    dstQuad[0].x = src->width *0.05;
    dstQuad[0].y = src->height *0.33;
    dstQuad[1].x = src->width * 0.9;
    dstQuad[1].y = src->height *0.25;
    dstQuad[2].x = src->width *0.2;
    dstQuad[2].y = src->height *0.7;
    dstQuad[3].x = src->width * 0.8;
    dstQuad[3].y = src->height *0.9;
    cvGetPerspectiveTransform(srcQuad, dstQuad, warp_matrix);  //稀疏透视变换
    cvWarpPerspective(src, dst, warp_matrix);//密集透视变换
    cvNamedWindow("show", 1);
    cvShowImage("show", dst);
    cvWaitKey();
    cvReleaseImage(&dst);
    cvReleaseImage(&src);
    cvDestroyAllWindows();
    return 0;
}
原文地址:https://www.cnblogs.com/chenyang920/p/5375600.html