OpenCV中二维点求取进行透视变换之后的坐标点方法

OpenCV中二维点求取进行透视变换之后的坐标点方法
我使用的是OpenCV 2.2版本。得到了一个透视矩阵,想把屏幕上的一个二维点经过这个透视矩阵进行变换,本身很简单的一个事情,却颇费了一番周折。原因是刚接触OpenCV,而且使用了OpenCV新添加的C++部分的矩阵类Mat,使用起来还真有点不顺手,因为OpenCV中没有向量的说法。一个矩阵变换一个向量就让我找了半天。

最终得以解决,还是使用了CvMat类而不是Mat类。代码如下:

1  CvPoint transformPoint( const  CvPoint pointToTransform,  const  CvMat *  matrix) 
2  {
3       double  coordinates[ 3 =  {pointToTransform.x, pointToTransform.y,  1 };
4      CvMat originVector  =  cvMat( 3 1 , CV_64F, coordinates);
5      CvMat transformedVector  =  cvMat( 3 1 , CV_64F, coordinates);
6      cvMatMul(matrix,  & originVector,  & transformedVector);
7      CvPoint outputPoint  =  cvPoint(( int )(cvmGet( & transformedVector,  0 0 /  cvmGet( & transformedVector,  2 0 )), ( int )(cvmGet( & transformedVector,  1 0 /  cvmGet( & transformedVector,  2 0 )));
8       return  outputPoint;
9  }

这个函数一个很有用的地方就在于,原本二维图上的一个像素点位于(x,y)处,经过一个变换(仿射变换、透视变换)之后,求取它的新的坐标点(x', y')。

你可能感兴趣的:(OpenCV中二维点求取进行透视变换之后的坐标点方法)