OpenCV - 如何循环Java中的像素?

时间:2017-01-22 07:43:15

标签: java opencv image-processing camera

我正在尝试以更复杂的方式在我们的frc团队中使用相机,并且刚刚开始使用OpenCV和Java。我一直试图遍历所有像素,因为我想获取颜色值来检测通过相机显示的颜色。

我已经能够使用<link rel="prefetch" href="RESOURCE_URL"> .put(col, row, valueToPut)方法获取像素。但我不能遍历所有像素(其中有640x480),因为我们的roborio太慢了。我也知道.get(col, row).put方法非常慢。

有谁知道我应该做些什么才能让它更快?

1 个答案:

答案 0 :(得分:0)

你可以使用.get(col,row)从opencv Mat获取一行或整个矩阵到java原始数组,并对你在该数组上执行的任何操作然后使用put方法将java数组放回opencv矩阵。这样,它比单个像素访问快得多。即减少对opencv get和put方法的调用将带来更好的性能。

Mat A ;
A.convertTo(A,cvType.CV_16SC3);
int size = (int) (A.total() * A.channels());
short[] temp = new short[size];
A.get(0, 0, temp);
for (int i = 0; i < size; i++)
   temp[i] = (short) (temp[i] / 2);
C.put(0, 0, temp);
相关问题