我正在Android中阅读图片,我想访问图片的像素值。
我正在阅读像这样的图像
Mat img1 = new Mat();
img1 = Highgui.imread(filePath1);
有没有一种有效的方法将Mat对象转换为float数组?
目前,我正在这样做&这很慢。
private float[][] convertToFloatArray(String filePath1){
img1 = Highgui.imread(filePath1);
String output = img1.dump();
float[][] flt = new float[img1.rows()][img1.cols()];
// slowest step but necessary to remove [, ;, etc.
String array1[] = output.split("[^0-9]+");
int k = 0;
for(int i = 0;i<img1.rows();i++) {
for(int j = 0;j<img1.cols();j++) {
flt[i][j] = (Float.valueOf(array1[k])).floatValue();
k += 1;
}
}
答案 0 :(得分:1)
能够找到解决方案
img1 = new Mat();
img1 = Highgui.imread(filePath1, 0);
int buff[] = new int[(int)img1.total() * img1.channels()];
img1.get(0, 0, buff);
return buff;
答案 1 :(得分:0)
你提到int数组会很好。您可以跳过上面使用的字符串浮点数和字符串行,只需使用它:
int k = 0;
for(int i = 0;i<img1.rows();i++) {
for(int j = 0;j<img1.cols();j++) {
int_arr[i][j] = static_cast<unsigned>(img1.data[k]);
k += 1;
}
}
还要跟踪您拥有的频道数量。