Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/310.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java OpenCV无法从MatOfInt4复制到MatOfInt4 我使用OpenHV4.2.0应用程序,使用HOWLIN SeP来检测图像中的行,它使用C++和ObjaveC工作得很好。现在我需要在Android上为java工作的功能相同。_Java_Android_Opencv - Fatal编程技术网

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,太棒了,非常感谢你的帮助和清晰的解释。当我在循环中做一些事情时,我需要使用您的第一个选项之一。