我正在尝试以更复杂的方式在我们的frc团队中使用相机,并且刚刚开始使用OpenCV和Java。我一直试图遍历所有像素,因为我想获取颜色值来检测通过相机显示的颜色。
我已经能够使用<link rel="prefetch" href="RESOURCE_URL">
和.put(col, row, valueToPut)
方法获取像素。但我不能遍历所有像素(其中有640x480),因为我们的roborio太慢了。我也知道.get(col, row)
和.put
方法非常慢。
有谁知道我应该做些什么才能让它更快?
答案 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);