我有一個3層cv :: mat,我想在第一層和最後一層之間切換。 有些事情是這樣的:(MATLAB風格)如何在C++中翻轉cv :: mat?
cv::mat mt = image;
mt = [mt[:,:,3],mt[:,:,2],mt[:,:,1]];
我有一個3層cv :: mat,我想在第一層和最後一層之間切換。 有些事情是這樣的:(MATLAB風格)如何在C++中翻轉cv :: mat?
cv::mat mt = image;
mt = [mt[:,:,3],mt[:,:,2],mt[:,:,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);
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; 。另外,我認爲使用
層=通道/尺寸?使用cv :: split – Micka 2014-10-27 18:09:54
你能給出一個完整的答案嗎?我不明白 – ifryed 2014-10-27 18:13:56
http://docs.opencv.org/modules/core/doc/operations_on_arrays.html#split – Micka 2014-10-27 18:34:43