将Mat对象中的图像转换为Android中的浮点数组
我正在用Android阅读一幅图像,我想访问图像的像素值 我正在读这样的图片将Mat对象中的图像转换为Android中的浮点数组,android,opencv,Android,Opencv,我正在用Android阅读一幅图像,我想访问图像的像素值 我正在读这样的图片 Mat img1 = new Mat(); img1 = Highgui.imread(filePath1); 有没有有效的方法将Mat对象转换为浮点数组 目前,我正在这样做&这是非常缓慢的 private float[][] convertToFloatArray(String filePath1){ img1 = Highgui.imread(filePath1); String output
Mat img1 = new Mat();
img1 = Highgui.imread(filePath1);
有没有有效的方法将Mat对象转换为浮点数组
目前,我正在这样做&这是非常缓慢的
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;
}
}
private float[]convertToFloatArray(字符串文件路径1){
img1=Highgui.imread(filePath1);
字符串输出=img1.dump();
float[][]flt=newfloat[img1.rows()][img1.cols()];
//最慢的步骤,但必须移除[,;等。
字符串数组1[]=output.split([^0-9]+”);
int k=0;
对于(int i=0;i您提到的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;
}
}
intk=0;
对于(inti=0;i),我能够找到一个解决方案
img1 = new Mat();
img1 = Highgui.imread(filePath1, 0);
int buff[] = new int[(int)img1.total() * img1.channels()];
img1.get(0, 0, buff);
return buff;
真不敢相信你应该先转储到一个字符串。然后拆分字符串以获得像素值。肯定有一种更简单的方法。你为什么需要浮点?为什么不需要整数?@greenapps:即使是整数也可以。你知道一种转换为整数的方法吗?我什么都不知道。我只是想知道为什么你会先将所有内容转储到一个字符串,然后拆分字符串值。我说我认为会有其他更好的方法。你对此没有反应。如果我知道更好的方法,我不会在这里问。^-^静态转换在Java中不是一件事。这不起作用