将c ++ opencv IplImage imageData和widthStep转换为android opencv Mat

时间:2016-06-23 14:55:32

标签: android c++ opencv

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

[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 ?

{{1}}

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

由于

1 个答案:

答案 0 :(得分:0)

深度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。我相信你会有很多选择。

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

  

因此,Mat中的数据布局与CvMat,IplImage完全兼容,   和OpenCV 1.x中的CvMatND类型。

并阅读它。

同时阅读

  

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