cvPerspectiveTransform

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/hanshuobest/article/details/50456909

今天在用到透视投影变换的时候,调用opencv中的cvPerspectiveTransform ,不知为何总是报错,后来仔细看了cvPerspectiveTransform 函数说明后才明白,
void cvPerspectiveTransform( const CvArr* src, CvArr* dst, const CvMat* mat );
参数src,dst必须是三通道的浮点数组,也就是一个值中包含有(x,y,z)坐标了。
以一个简单的例子说明
示例

#include <cv.h>
#include <highgui.h>
using namespace cv;


void main()
{
    float A[] = {1 , 0 , 0 , 0 ,
               0 , 2 , 0 , 10 ,
               0 , 0 , 1 , 20 ,
               0 , 0 , 0 , 1} ;
    CvMat *perMat = cvCreateMat(4 , 4 , CV_32FC1) ;//透视投影变换矩阵
    cvInitMatHeader(perMat , 4 , 4, CV_32FC1 , A) ;
    float s[] = {10 , 20 , 30} ;
    CvMat *src = cvCreateMat(1 , 1 , CV_32FC3) ;//待变换点
    cvInitMatHeader(src , 1 , 1 , CV_32FC3 , s) ;

    CvMat *dst = cvCreateMat(1 , 1 , CV_32FC3) ;//变换后点

    cvPerspectiveTransform(src , dst , perMat) ;
    std::cout<<std::endl ;
    for (int i = 0 ; i < 1 ; i++)
    {
        float *pdata = (float*)(dst->data.ptr) ;
        std::cout<<*pdata<<"\t"<<*(pdata + 1)<<"\t"<<*(pdata + 2) ;
    }
    std::cout<<std::endl ;
}
展开阅读全文

没有更多推荐了,返回首页