我正在使用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。
由于
答案 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的指针的特殊构造函数 可选标志,指示是否复制数据。