繁体   English   中英

将cv :: Mat转换为const CvMat *或CvMat *

[英]convert cv::Mat to const CvMat* or CvMat*

我只知道C语言,所以我感到困惑/不理解openCV数据类型的语法,特别是在cv::Mat, CvMat*, Mat.

我的问题是如何将cv::Mat转换为const CvMat *或CvMat* ,并且任何人都可以在opencv2.4中提供CvMat *matcv::MatMat之间差异的文档链接。

如何将我的int数据转换为CvMat中的浮点数据? 谢谢

cv::Mat有一个运算符CvMat(),所以简单的赋值工作:

cv::Mat mat = ....;
CvMat cvMat = mat;

这使用相同的底层数据,因此您必须注意cv::MatCvMat之前不会超出范围。

如果您需要使用CvMat ,需要一个一个API中CvMat* ,然后传递对象的地址:

functionTakingCmMatptr(&cvMat);

至于cv::MatMat之间的区别,它们是相同的。 OpenCV示例中,通常假定using namespace cv (并且我认为这不是一个好主意)。

特别回答surya的第二个问题:

THB,关于OpenCV的文档不是最好的。 这里是最新类型的链接:cv :: Mat http://docs.opencv.org/2.4/modules/core/doc/basic_structures.html#mat较新的类型比c风格更现代的c ++。

这里还有两个OpenCV论坛答案,其中有类似的主题: http//answers.opencv.org/question/65224/conversion-between-cvmat-and-cvmat/http://www.answers.opencv.org/question/ 13437 /差之间-与CvMat-与CvMat-CvMat中和垫/

特别是对于转换问题(如提到的juanchopanza):

cv::Mat mat = cv::Mat(10, 10, CV_32FC1); //CV_32FC1 equals float 
                                         //(reads 32bit floating-point 1 channel)
CvMat cvMat = mat;

或者

using namespace cv; //this should be in the beginning where you include
Mat mat = Mat(10, 10, CV_32FC1); 
CvMat cvMat = mat;

注意:通常你可能会使用CvMat* - 但你应该考虑完全切换到更新的类型。 示例(取自我的第二个链接):

CvMat* A = cvCreateMat(10, 10, CV_32F); //guess this works fine with no channels too

将int更改为float:

CvMat* A = cvCreateMat(10, 10, CV_16SC1);
//Feed A with data
CvMat* B = cvCreateMat(10, 10, CV_32FC1);
for( int i=0; i<10; ++i) 
    for( int i=0; i<10; ++i) 
        CV_MAT_ELEM(*A, float, i, j) = (float) cvmGet(B, i, j);
//Don't forget this unless you want to produce a memory leak. 
cvReleaseMat(&A);
cvReleaseMat(&B);

前两个例子(没有指针)很好,因为CvMat然后保存在堆上。 cvCreateMat(...)分配你必须在以后自由释放的内存。 使用cv::Mat另一个原因。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM