首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >OpenCV C++到C的转换

OpenCV C++到C的转换
EN

Stack Overflow用户
提问于 2013-07-11 17:20:45
回答 2查看 571关注 0票数 0

如果在openCV中使用C++ API创建旋转矩阵如果我写

代码语言:javascript
复制
       Mat rot_matrix = getRotationMatrix2D(src_center, angle, 1.0);

那我该怎么用C用openCV写呢?我应该写什么而不是Mat?是这样的吗?

代码语言:javascript
复制
         CvMat* rot_mat =cv2DRotationMatrix( center, angle, scale, rot );

上面的声明正确吗?如果是,那么我如何在包装仿射函数中表示它?是这样的吗?

代码语言:javascript
复制
         cvWarpAffine( src, dst, rot_mat);
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2013-07-11 22:52:59

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

首先,正如您所写的,对于原始问题,Mat确实是C++表单。

在C中使用CvMat,但函数cv2DRotationMatrix()已经将CvMat *作为参数的一部分,因此可以这样使用:

代码语言:javascript
复制
 cv2DRotationMatrix(center,angle,scale,rot_mat);

地址:

宽度中心是源图像中旋转的中心(宽度/2,height/2).

  • angle -所需的旋转角度(在degrees).

  • scale中)-各向同性比例因子(1表示图片将保持相同的指针)-指向目标矩阵(用作旋转矩阵的2x3矩阵)的指针) CvPoint2D32f

现在rot_mat将保存旋转矩阵:

地址:

现在,您希望在将整个图片旋转x度之后计算每个像素的位置(对像素/pciture/image进行仿射变换)。

在此阶段,您拥有在仿射变换中使用的旋转矩阵,并且希望进行仿射变换(旋转图像),因此可以使用函数cvWarpAffine()

本例中的

代码语言:javascript
复制
cvWarpAffine( src, dst, rot_mat );

地址:

  • src -
  • dst的源映像-目标源作为我们的mapMatrix(转换矩阵)

*还有第四个参数,它是flag,但对于我们的情况,默认值是o.k。

它是做什么的?

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

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

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

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

*函数的技术方面来自:http://opencv.willowgarage.com/documentation/geometric_image_transformations.html

票数 1
EN

Stack Overflow用户

发布于 2013-07-11 17:28:56

这看起来就像是把C++程序移植到C上,根据Wikipedia,你可以找到你想要的C接口。

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

您可以使用指针来包装类对象。它将如下所示:

代码语言:javascript
复制
CvMat * cv2dRotationMatrix( CvPoint *, CvAngle *, float );

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

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/17589645

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档