如何用cvmGet替换我对cvGetReal2D的调用?

时间:2013-02-05 22:14:25

标签: c++ windows optimization opencv

如何将cvGetReal2D的来电替换为cvmGet

我有像

这样的功能
bool someFunction(CvPoint2D32f location, IplImage &image)
{
  // code
  z = cvGetReal2D(image, location.y, location.x);
  // code
}

我正在尝试将cvGetReal2D替换为cvmGet,因为我读到它更快 - 但我是OpenCV的初学者(我正在修改其他人编写的代码)。

我是否每次都要为每一点创建一个完整的CvMat?在这种情况下,因为我无法改变我传递IplImage的事实......更改会使代码变慢,对吧?

CvMat* imageCopy = cvCreateMat(image.width, image.height, image.depth);

(我也看过像CV_32FC1这样的常量 - 但我不知道如何选择)

然后,我要复制它吗?

cvCopy(image, imageCopy);    // I hope this would copy the values
I tried - I get an exception...

它适用于多通道矩阵吗?我是否需要询问多少个频道,并对它们进行迭代?

1 个答案:

答案 0 :(得分:1)

使用以下方法将IplImage转换为Mat:

IplImage *img; 
Mat imgMat(img); 

然后您可以使用cvmGet

CV_32FC1可以选择如下:

Mat imageCopy = cvCreateMat(image.width, image.height, image.depth, CV_32FC1);

我希望您使用的是OpenCV 2.4x

#include <opencv2/opencv.hpp>
#include <opencv2/highgui/highgui.hpp>

包含这些以使用cv :: Mat

使用cvarrtoMat:

IplImage A1; 
Mat B1 = cvarrToMat(&A1);