您的位置:首页 > 其它

cvPerspectiveTransform

2016-01-04 16:42 1071 查看
今天在用到透视投影变换的时候,调用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 ;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: