如果在openCV中使用C++ API创建旋转矩阵如果我写
Mat rot_matrix = getRotationMatrix2D(src_center, angle, 1.0);那我该怎么用C用openCV写呢?我应该写什么而不是Mat?是这样的吗?
CvMat* rot_mat =cv2DRotationMatrix( center, angle, scale, rot );上面的声明正确吗?如果是,那么我如何在包装仿射函数中表示它?是这样的吗?
cvWarpAffine( src, dst, rot_mat);发布于 2013-07-11 22:52:59
根据我们在评论区的小聊天,我认为你有点困惑,所以我决定给你写一个答案,试图让它更清晰一点。
首先,正如您所写的,对于原始问题,Mat确实是C++表单。
在C中使用CvMat,但函数cv2DRotationMatrix()已经将CvMat *作为参数的一部分,因此可以这样使用:
cv2DRotationMatrix(center,angle,scale,rot_mat);地址:
宽度中心是源图像中旋转的中心(宽度/2,height/2).
CvPoint2D32f 现在rot_mat将保存旋转矩阵:

地址:

现在,您希望在将整个图片旋转x度之后计算每个像素的位置(对像素/pciture/image进行仿射变换)。
在此阶段,您拥有在仿射变换中使用的旋转矩阵,并且希望进行仿射变换(旋转图像),因此可以使用函数cvWarpAffine()
本例中的:
cvWarpAffine( src, dst, rot_mat );地址:
*还有第四个参数,它是flag,但对于我们的情况,默认值是o.k。
它是做什么的?
使用指定的矩阵转换源图像:


*或者更简单地说,就像我之前描述的那样,它“只是”计算旋转后每个像素的新位置(使用旋转矩阵-作为仿射函数的输入)。
rot_mat应该是2x3 mat -您可以通过调用cvCreateMat()来创建它。
src、dst是IplImage * (因为我们说它是c代码)。
*函数的技术方面来自:http://opencv.willowgarage.com/documentation/geometric_image_transformations.html
发布于 2013-07-11 17:28:56
这看起来就像是把C++程序移植到C上,根据Wikipedia,你可以找到你想要的C接口。
如果参数不是引用而是指针,声明似乎是正确的,因为C不支持引用。
您可以使用指针来包装类对象。它将如下所示:
CvMat * cv2dRotationMatrix( CvPoint *, CvAngle *, float );正如您已经指出的,您需要将C++函数包装在一个纯C函数中。
https://stackoverflow.com/questions/17589645
复制相似问题