cvPerspectiveTransform

来源:互联网 发布:淘宝的宝贝尺寸是多少 编辑:程序博客网 时间:2024/06/11 14:56

今天在用到透视投影变换的时候,调用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 ;}
0 0
原创粉丝点击