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

2024-03-06

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

Python:

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

我已经得到的:

cv::cvtColor(image_pd, image_pd, cv::COLOR_BGR2RGB);
image_pd.convertTo(image_f, CV_32F);

如何在 C++ 中转置 3D 矩阵/图像?基本上相当于什么image = numpy.transpose(image, (2, 0, 1)) in C++?


要从 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);

[编辑] 从4.6.0开始,您还可以使用转置ND() https://docs.opencv.org/4.x/d2/de8/group__core__array.html#gab1b1274b4a563be34cdfa55b8919a4ec

Mat src=...
Mat dst;
transposeND(src, {2,0,1}, dst);
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

C++ OpenCV 转置/排列图像轴 的相关文章

随机推荐