使用 opencv 将图像从 BGR 转换为 ARGB

Sag*_*gar 5 c++ opencv image-processing

  • 我想将 BGR 图像转换为 ABGR/ARGB。opencv 中有转换 BGR2RGBA 但没有 BGR2ABGR 或 BGR2ARGB。
  • 可以使用 opencv 或使用任何其他方法吗?

sga*_*zvi 7

所需的操作可以通过使用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输出的通道号,1122和通道号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)