【问题标题】: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) 会很好
    猜你喜欢
    • 2022-06-25
    • 2018-09-22
    • 1970-01-01
    • 2017-06-03
    • 2016-08-16
    • 1970-01-01
    • 2022-08-14
    • 1970-01-01
    • 2012-10-22
    相关资源
    最近更新 更多