Sag*_*gar 5 c++ opencv image-processing
所需的操作可以通过使用cv::mixChannels以下方法交换图像通道来完成:
cv::Mat bgr, bgra;
//bgr initialization code here...
//.
//.
//.
cv::cvtColor(bgr, bgra, cv::COLOR_BGR2BGRA);
cv::Mat abgr(bgra.size(), bgra.type());
int from_to[] = { 0,3, 1,1, 2,2, 3,0 };
cv::mixChannels(&bgra,1,&abgr,1,from_to,4);
Run Code Online (Sandbox Code Playgroud)
from_toarray 是映射函数,它指定源图像的哪些通道将复制到目标图像的哪些通道。对表示0输入的通道号将复制到3输出的通道号,1到1、2到2和通道号3将复制到0输出的通道号。
或者,我们可以拆分图像通道,交换所需的通道并再次合并。可以按如下方式完成:
cv::cvtColor(bgr, bgra, cv::COLOR_BGR2BGRA);
std::vector<cv::Mat> channels_bgra;
cv::split(bgra, channels_bgra);
std::vector<cv::Mat> channels_abgr = { channels_bgra[3], channels_bgra[1], channels_bgra[2], channels_bgra[0] };
cv::merge(channels_abgr, abgr);
Run Code Online (Sandbox Code Playgroud)