【问题标题】:How to flip a cv::mat in c++?如何在 C++ 中翻转 cv::mat?
【发布时间】:2014-10-28 03:22:39
【问题描述】:
我有一个 3 层的 cv::mat,我想在第一层和最后一层之间切换。
像这样的东西:(matlab风格)
cv::mat mt = image;
mt = [mt[:,:,3],mt[:,:,2],mt[:,:,1]];
【问题讨论】:
标签:
c++
opencv
image-processing
matrix
【解决方案1】:
更精致的 ifryed 解决方案:
#include <algorithm>
cv::Mat im = getImage();
std::vector<cv::Mat> img_rgb;
cv::split(im,img_rgb);
std::iter_swap(img_rgb, img_rgb+2);
cv::merge(img_rgb,im);
【解决方案2】:
cv::Mat im = getImage();
cv::Mat tmp = cv::Mat::zeros(cv::Size(im.rows,im.cols),CV_8UC1);
std::vector<cv::Mat> img_rgb;
cv::split(im,img_rgb);
img_rgb[0].copyTo(tmp);
img_rgb[2].copyTo(img_rgb[0]);
tmp.copyTo(img_rgb[2]);
cv::merge(img_rgb,im);
【讨论】:
-
应该可以!但我认为您不必使用 copyTo()。简单的赋值就可以了,因为我们不需要复制图像内容,它们的标题就足够了,例如拆分后只需执行 tmp = img_rgb[0]; img_rgb[0] = img_rgb[2]; img_rgb[2] = tmp; .此外,我认为使用 中的 iter_swap(img_rgb, img_rgb+2) 会很好