C++ 如何在c++;?

C++ 如何在c++;?,c++,opencv,image-processing,matrix,C++,Opencv,Image Processing,Matrix,我有一个3层的cv::mat,我想在第一层和最后一层之间切换。 类似这样的东西:(matlab风格) cv::Mat im=getImage(); cv::Mat tmp=cv::Mat::零(cv::大小(im.行,im.列),cv_8UC1); std::向量img_rgb; cv::分割(im、img_rgb); img_rgb[0].copyTo(tmp); img_rgb[2].copyTo(img_rgb[0]); tmp.copyTo(img_rgb[2]); 合并(img_rgb

我有一个3层的cv::mat,我想在第一层和最后一层之间切换。 类似这样的东西:(matlab风格)

cv::Mat im=getImage();
cv::Mat tmp=cv::Mat::零(cv::大小(im.行,im.列),cv_8UC1);
std::向量img_rgb;
cv::分割(im、img_rgb);
img_rgb[0].copyTo(tmp);
img_rgb[2].copyTo(img_rgb[0]);
tmp.copyTo(img_rgb[2]);
合并(img_rgb,im);

更加完美的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);
#包括
cv::Mat im=getImage();
std::向量img_rgb;
cv::分割(im、img_rgb);
标准:国际热核聚变实验堆交换(国际热核聚变实验堆rgb,国际热核聚变实验堆rgb+2);
合并(img_rgb,im);

Layer=通道/尺寸?你能给出一个完整的答案吗?我不明白Answare在这里应该也适用于其他iLife类型,应该也适用!但我认为您不必使用copyTo()。简单的赋值就可以了,因为我们不需要复制图像内容,它们的标题就足够了,例如,拆分后只需执行tmp=img_rgb[0];img_rgb[0]=img_rgb[2];img_rgb[2]=tmp。此外,我认为在那里使用iter_交换(img_rgb,img_rgb+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);
#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);