如何将 cv::Mat 中的尺寸从 CxWxH 置换为 WxHxC(宽度 x 高度 x 通道)?
即我如何转换 Mat:
来自
cv::Mat frame (1000, 1000, CV_8UC3) = cv::imread("image.jpg", -1);
尺寸:通道,宽度,高度
to Mat with dimensions: width, height, channels
int sizes_inputs[] = { 3, 1000, 1000 };
cv::Mat out_image(3, sizes_inputs, CV_8UC);
OpenCV 中是否有现成的快速转换函数?或者我应该自己实现这个算法?
如果你想以不同的方式对待底层数据,那么你可以使用
reshape
。数据存储为BGRBGRBGR...
。
否则你将不得不自己打乱数据。
cv::reshape
和 cv::minChannels
可能对此很方便。
你可以模仿它。我没有测试过代码,但应该这样做:
cv::Mat frame (1000, 1000, CV_8UC3) = cv::imread("image.jpg", -1);
int sizes_inputs[] = { 3, 1000, 1000 };
cv::Mat out_image(3, sizes_inputs, CV_8UC);
cv::Mat slices[] = {cv::Mat(1000, 1000, CV_8UC, out_image.ptr()),
cv::Mat(1000, 1000, CV_8UC, out_image.ptr() + 1000*1000),
cv::Mat(1000, 1000, CV_8UC, out_image.ptr() + 1000*1000*2)};
cv::split(frame, slices);
请在此处查看答案:C++ OpenCV 转置/置换图像轴
我尝试使用以下代码:
cv::Mat a = cv::imread("red.png");
auto b = a.clone();
std::vector<cv::Mat> planes =
{
cv::Mat(a.rows, a.cols, CV_8U, b.ptr(0)),
cv::Mat(a.rows, a.cols, CV_8U, b.ptr(0) + a.rows * a.cols),
cv::Mat(a.rows, a.cols, CV_8U, b.ptr(0) + a.rows * a.cols * 2)
};
cv::split(a, planes);