【问题标题】:Convert c++ opencv IplImage imageData and widthStep to android opencv Mat将 c++ opencv IplImage imageData 和 widthStep 转换为 android opencv Mat
【发布时间】:2016-06-23 14:55:31
【问题描述】:

我正在使用 opencv 开发一个 android 应用程序。 我有一个用 C++ 编写的算法,它使用 opencv,我正在将它移植到 java。 原始代码使用“IplImage”,但现在我不得不使用“Mat”。我设法转换了大部分代码,但我遇到了以下说明的问题:

IplImage *src;
src->imageData;
src->widthStep;

我可以使用

[JAVA - Mat]src.dataAddr()  as an equivalent for [C++ - IplImage]src ->imageData

[JAVA - Mat]src.step1(0) as an equivalent for [C++ - IplImage]src->widthStep ?

我发现该主题固有的唯一链接是this one,它解释了如何将“IplImage”转换为“Mat”,但仍使用 C++。我不能使用 javacv。

谢谢

【问题讨论】:

标签: android c++ opencv


【解决方案1】:

对于深度,Mat class has a method depth()

widthStep 有点棘手,因为 Mat 的 step 与 IplImage 中的 widthStep 并不完全相同,但似乎不再需要四的倍数 widthStep。 Here 是一个有趣的阅读答案。也就是说,Mat class also has a method for getting the step

关于imageData,我不确定IplImage 的imageData 到底包含什么,但是使用Mat,您可以通过循环矩阵并使用get(int row, int col) 等方法从单个像素中获取数据。通过documentation of Mat。我相信你会有很多选择。

在文档的开头,讨论了 IplImage 和 Mat 以及如何将数据保存在 Mat 和 IplImage 中。搜索

所以,Mat 中的数据布局完全兼容 CvMat、IplImage、 和 OpenCV 1.x 中的 CvMatND 类型。

并阅读它。

还可以阅读

这种用户分配数据的部分但非常常见的情况是 从 CvMat 和 IplImage 到 Mat 的转换。为此,有 是带有指向 CvMat 或 IplImage 的指针的特殊构造函数,并且 可选标志,指示是否复制数据。

【讨论】:

    猜你喜欢
    • 2011-09-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-03-08
    • 2012-08-03
    • 1970-01-01
    相关资源
    最近更新 更多