如何用cvmGet
替换对cvGetReal2D
的调用?
我有这样的功能
bool someFunction(CvPoint2D32f location, IplImage &image)
{
// code
z = cvGetReal2D(image, location.y, location.x);
// code
}
我试图用cvmGet
代替cvGetReal2D
,因为我读到它更快——但我是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);
然后您可以使用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);