实现toTensor
resize_img.convertTo(resize_img, CV_32F, 1.0 / 255); //divided by 255 resize_img -= 0.5f; // mean resize_img /= 0.5f; // std cv::Mat channels[3]; //借用来进行HWC->CHW cv::split(resize_img, channels); std::vector<float> inputTensorValues; for (int i = 0; i < resize_img.channels(); i++) // BGR2RGB, HWC->CHW { std::vector<float> data = std::vector<float>(channels[2 - i].reshape(1, resize_img.cols * resize_img.rows)); inputTensorValues.insert(inputTensorValues.end(), data.begin(), data.end()); } // inputTensorValues 可以作为输入数据送入onnxruntime
实现toTensor+normalize
float mean[]={0.5f,0.5f,0.5f};
float std_val[]={0.5f,0.5f,0.5f};
resize_img.convertTo(resize_img, CV_32F, 1.0 / 255); //divided by 255
cv::Mat channels[3]; //借用来进行HWC->CHW
cv::split(resize_img, channels);
std::vector<float> inputTensorValues;
for(int i=0; i< resize_img.channels(); i++)
{
channels[i] -= mean[i]; // mean
channels[i] /= std_val[i]; // std
}
for (int i = 0; i < resize_img.channels(); i++) // BGR2RGB, HWC->CHW
{
std::vector<float> data = std::vector<float>(channels[2 - i].reshape(1, resize_img.cols * resize_img.rows));
inputTensorValues.insert(inputTensorValues.end(), data.begin(), data.end());
}
// inputTensorValues 可以作为输入数据送入onnxruntime
public float[] toTensor(Mat mat) {
mat.convertTo(mat, CvType.CV_32F);
ArrayList<Mat> dst = new ArrayList<>(3);
Core.split(mat, dst);
ArrayList<Float> arrayList = new ArrayList<>();
for (int i = dst.size() - 1; i >= 0; i--) { # bgr --> rgb OpenCV默认读取的图像是BGR
arrayList.addAll(Floats.asList(matToFloat(dst.get(i))));
}
Float t[] = new Float[arrayList.size()];
arrayList.toArray(t);
float[] data = new float[t.length];
for (int i = 0; i < t.length; i++) {
data[i] = t[i] / 255.0f;
}
return data;
}
https://www.cxyzjd.com/article/znsoft/117128781