java - Java OpenCV 无法从 MatOfInt4 复制到 MatOfInt4
问题描述
我有一个 OpenCV 4.2.0 应用程序,它使用 HoughLinesP 来检测图像中的线条,该线条与 C++ 和 Objective-C 配合得很好。现在我需要在 Android 上为 java 提供相同的功能。
我已经与它斗争了几天,并将其归结为以下问题。我无法使用 for 循环将值从一个 MatOfInt4 复制到另一个 MatOfInt4lines2.put(i,0, lines.get(i, 0));
下面是一段代码和日志输出。没有编译器错误或运行时错误,只是没有保存在 lines2 目标 MatOfInt4 中的值。要么我误解了 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());
测试代码结果:
返回的子行总数:1x180
转储行2返回:[]
循环次数:180
返回的总行数2:0x0
任何帮助或指导将不胜感激。
解决方案
lines2
矩阵没有大小,因此您无法在其中设置值。为了解决这个问题,您可以分配适当大小的矩阵,例如
MatOfInt4 lines2 = new MatOfInt4();
lines2.create(1,lines.rows(), lines.type());
// alternatively:
Mat lines2 = new 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
推荐阅读
- nlp - 如何检查子动词 obj 三元组的真实性?
- angular - 如何以编程方式扩展primeng树表
- angular - Angular Material多对象拖放与调整大小问题
- docker-compose - 使用网格和 DNSRR 的 Docker 群网络延迟
- javascript - 在 v-data-table 中显示来自 Api 的数据,对象内的对象 vue js,vuetify
- css - 制作带有可点击背景的模态,无需 JavaScript
- javascript - React 在 useState 更改时添加表格单元格 flash 动画
- flutter - 如何检查密钥是否存在共享首选项值然后打开一个新屏幕
- javascript - 重写 javascript 函数以避免 JQuery.json 文件不被服务器读取
- java - 在java中具有相同值的另一个节点之前插入一个节点