C++ OpenCV 转置/排列图像轴

Akr*_*roB 5 c++ python opencv transpose numpy

我很难用 C++ 编写这个 python 行:

Python:

frame_nn = cv2.cvtColor(padded, cv2.COLOR_BGR2RGB).transpose(2,0,1).astype(np.float32)[None,]
Run Code Online (Sandbox Code Playgroud)

我已经得到的:

cv::cvtColor(image_pd, image_pd, cv::COLOR_BGR2RGB);
image_pd.convertTo(image_f, CV_32F);
Run Code Online (Sandbox Code Playgroud)

如何在 C++ 中转置 3D maxtrix / 图像?image = numpy.transpose(image, (2, 0, 1))基本上, C++ 中的等价物是什么?

ber*_*rak 12

要将 HWC 通道顺序转换为 CHW 通道顺序,您可以使用它(窃取自blobFromImage())

int siz[] = {3, img.rows, img.cols};
Mat chw(3, siz, CV_8U);
vector<Mat> planes = {
    Mat(img.rows, img.cols, CV_8U, img.ptr(0)), // swap 0 and 2 and you can avoid the bgr->rgb conversion !
    Mat(img.rows, img.cols, CV_8U, img.ptr(1)),
    Mat(img.rows, img.cols, CV_8U, img.ptr(2))
};
split(img, planes);
chw.convertTo(chw, CV_32F);
Run Code Online (Sandbox Code Playgroud)

[编辑]从4.6.0开始,你还可以使用transposeND()

Mat src=...
Mat dst;
transposeND(src, {2,0,1}, dst);
Run Code Online (Sandbox Code Playgroud)