如何用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...

它可以在多通道矩阵上工作吗?我是否需要询问多少个通道并对其进行迭代?

最佳答案

使用以下命令将IplImage转换为Mat:

IplImage *img;
Mat imgMat(img);

然后你可以使用cvmGetCV_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);

08-16 23:05