2013-07-11 89 views
0

如果在OpenCV中与C++ API,同时创造一个旋转矩阵如果我写OpenCV的C++到C转换

 Mat rot_matrix = getRotationMatrix2D(src_center, angle, 1.0); 

那么我应该怎么写呢OpenCV中使用C?我应该写什么,而不是马特?是这样的: -

  CvMat* rot_mat =cv2DRotationMatrix(center, angle, scale, rot); 

上面的声明是正确的吗?如果是的话,那么我怎样才能表达它在包络仿射功能? 是这样的: -

  cvWarpAffine(src, dst, rot_mat); 
+0

的最好办法是尝试它,而且你不需要写* CvMat中它rot_mat足够做:cv2DRotationMatrix(中心,角,scale,rot_mat),然后cvWarpAffine(src,dst,rot_mat) – TheNewOne

+0

@TheNewOne我试过你的方式,但我得到错误,因为错误:'rot_mat'未在此范围内声明 – user2567857

+0

您需要在上面声明它,CvMat * rot_mat = cvCreateMat(行,COLS,类型)。无论如何,如果问题是代码发布完整的代码和错误。 – TheNewOne

回答

1

根据我们在评论界的小聊,我觉得你有点困惑,所以我决定给你写一个答案,试图让它更清晰。

首先为你写的原始问题Mat确实是C++表格。

在C使用CvMat但功能cv2DRotationMatrix()已经花费CvMat *如因此它可用于等的参数的一部分:

cv2DRotationMatrix(center,angle,scale,rot_mat); 

其中:

  • 中心是CvPoint2D32f,源图像中的旋转中心(宽度/ 2,高度/ 2)。
  • angle - 所需的旋转角度(以度为单位)。
  • 规模 - 各向同性缩放因子(1表示画面会在相同的大小被保持)
  • mapMatrix - 指向目标矩阵(将被用作旋转矩阵的2×3矩阵)

现在rot_mat将持有的旋转矩阵:

enter image description here

其中:

enter image description here

现在你想在X度整个画面(像素/ pciture /图像上的仿射变换)旋转后,以计算每个像素的位置。

在这个阶段,你有旋转矩阵是在仿射变换正在使用,你想要做的仿射变换(旋转图像),所以你可以使用功能cvWarpAffine()

在我们的例子:

cvWarpAffine(src, dst, rot_mat); 

其中:

  • SRC - 源图像
  • DST - 目的地形象
  • rot_mat作为我们mapMatrix(变换矩阵)

*还有第四个参数是标志,但默认是OK的我们的情况。

它做什么?

使用指定的矩阵变换源图像:

enter image description here

enter image description here

*或在更简单的话,因为我描述它“只”计算后的每个像素的新的位置之前旋转(使用旋转矩阵 - 作为仿射函数的输入)。

rot_mat应该是2x3垫 - 你可以通过调用cvCreateMat()来创建它。

src,dst是IplImage *(因为我们说它是c代码)。

*功能的技术方面是: http://opencv.willowgarage.com/documentation/geometric_image_transformations.html

0

好像移植的C++程序C.按Wikipedia,有I2C接口,你可以看看你的目的。

声明似乎是正确的,只要参数不是引用而是指针,因为C不支持引用。

您可以使用指针来包装类对象。它会像:

CvMat * cv2dRotationMatrix(CvPoint *, CvAngle *, float); 

正如您已经指出,您需要将C++函数包装在纯C函数下。