Java OpenCV无法从MatOfInt4复制到MatOfInt4 我使用OpenHV4.2.0应用程序,使用HOWLIN SeP来检测图像中的行,它使用C++和ObjaveC工作得很好。现在我需要在Android上为java工作的功能相同。
我已经和它斗争了几天了,现在把它归结为以下问题。我无法使用带有Java OpenCV无法从MatOfInt4复制到MatOfInt4 我使用OpenHV4.2.0应用程序,使用HOWLIN SeP来检测图像中的行,它使用C++和ObjaveC工作得很好。现在我需要在Android上为java工作的功能相同。,java,android,opencv,Java,Android,Opencv,我已经和它斗争了几天了,现在把它归结为以下问题。我无法使用带有lines2.put(I,0,lines.get(I,0))的for循环将值从一个MatOfInt4复制到另一个MatOfInt4 下面是一段代码和日志输出。没有编译器错误或运行时错误,只是行2中没有保存任何值。要么我误解了put方法的工作原理,要么是出了其他问题 有人知道这会出什么问题吗?有没有使用Java和OpenCV的专家能够为下面的代码提供任何指导或更正,使其能够正常工作 您可以看到行有180个条目,for循环计数为180个循
lines2.put(I,0,lines.get(I,0))的for循环将值从一个MatOfInt4复制到另一个MatOfInt4代码>
下面是一段代码和日志输出。没有编译器错误或运行时错误,只是行2中没有保存任何值。要么我误解了put方法的工作原理,要么是出了其他问题
有人知道这会出什么问题吗?有没有使用Java和OpenCV的专家能够为下面的代码提供任何指导或更正,使其能够正常工作
您可以看到行有180个条目,for循环计数为180个循环,但完成时lines2为空。我可以get()
正确地从行中获取值,并且使用代码其他部分中的值,但是我不能put()
将任何内容放入行2中
MatOfInt4 lines = new MatOfInt4();
lines = houghLinesP(sub);
Log.i(TAG, "Total Sub Lines Returned: " + lines.size());
MatOfInt4 lines2 = new MatOfInt4();
for(int i = 0; i < lines.rows(); i++) {
lines2.put(i,0, lines.get(i, 0));
Log.i(TAG, "Count of loop: " + i);
}
Log.i(TAG, "Dump of lines2 Returned: " + lines2.dump());
Log.i(TAG, "Total Lines2 Returned: " + lines2.size());
MatOfInt4行=新的MatOfInt4();
线条=houghLinesP(子线);
Log.i(标记,“返回的子行总数:”+Lines.size());
MatOfInt4 lines2=新的MatOfInt4();
对于(int i=0;i
测试代码的结果:
返回的子行总数:1x180
返回的行2转储:[]
循环计数:180
返回的行总数2:0x0
非常感谢您的帮助或指导。矩阵中的行2
没有大小,因此您无法在其中设置值。要解决此问题,您可以分配适当大小的矩阵,例如
MatOfInt4 lines2=新的MatOfInt4();
lines2.create(1,lines.rows(),lines.type());
//或者:
Mat lines2=新Mat(1,lines.rows(),lines.type());
如果不在循环中执行任何其他操作,也可以转置矩阵以获得相同的结果:
Mat lines2=lines.t();
此转置矩阵将已包含正确的值。对于我的示例图像,这将生成以下输出:
Total Sub Lines Returned: 1x295
Dump of lines2 Returned: [9, 187, 137, 201, 353, 211, 430, 213, 95, etc...
Total Lines2 Returned: 295x1
你好@Jannik,太棒了,非常感谢你的帮助和清晰的解释。当我在循环中做一些事情时,我需要使用您的第一个选项之一。