[英]convert cv::Mat to const CvMat* or CvMat*
我只知道C语言,所以我感到困惑/不理解openCV
数据类型的语法,特别是在cv::Mat, CvMat*, Mat.
我的问题是如何将cv::Mat
转换为const CvMat
*或CvMat*
,并且任何人都可以在opencv2.4中提供CvMat *mat
和cv::Mat
和Mat
之间差异的文档链接。
如何将我的int数据转换为CvMat中的浮点数据? 谢谢
cv::Mat
有一个运算符CvMat(),所以简单的赋值工作:
cv::Mat mat = ....;
CvMat cvMat = mat;
这使用相同的底层数据,因此您必须注意cv::Mat
在CvMat
之前不会超出范围。
如果您需要使用CvMat
,需要一个一个API中CvMat*
,然后传递对象的地址:
functionTakingCmMatptr(&cvMat);
至于cv::Mat
和Mat
之间的区别,它们是相同的。 在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.