I couldn’t find any way to change channels place(3-channel) in Opencv Mat to pass it to ONNX model with channels_last dataformat. Please help me.
assuming, you got the image from imread()
,
if your network input requires 3 channel input – leave it as-is.
if it needs 4, wrap another Mat header around the data, like:
img.convertTo(img, CV_32F, 1.0/255);
int sz[] = {1, img.rows, img.cols, img.channels()};
Mat blob(4, sz, CV_32F, img.data);
just avoid the dnn::imageToBlob()
function,
which will split the image planes to NCHW format !
1 Like
Thank you for your quick response, unfortunately, I am working with OpenCVForUnity, and there are no img.data, but with your code I tried to use OpenCVForUnity Mat.Reshape with mentioned reshaped size. Project is working, I hope the dnn output will be expected after my tests. Thank you very much again!!!
Regards,
Tigran
1 Like