通道交换
读取图像,然后将 RGB \text{RGB} RGB通道替换成 BGR \text{BGR} BGR通道。opencv中的图像存储都是 BGR \text{BGR} BGR通道
代码实现
#include <opencv2/core.hpp>
#include <opencv2/highgui.hpp>
#include<iostream>
using namespace cv;
//通道交换rgb->bgr
Mat channel_swap(Mat img)
{
//获取图像的长宽
int width = img.cols;
int height = img.rows;
//创建输出图像画布
Mat out = Mat::zeros(height, width, CV_8UC3);
//遍历图像
for (int y = 0; y < height; y++)
{
for (int x = 0; x < width; x++)
{
//r->b
out.at<Vec3b>(y, x)[0] = img.at<Vec3b>(y, x)[2];
//g->g
out.at<Vec3b>(y, x)[1] = img.at<Vec3b>(y, x)[1];
//b->r
out.at<Vec3b>(y, x)[2] = img.at<Vec3b>(y, x)[0];
}
}
return out;
}
int main()
{
Mat img = imread("lena.jpg");
imshow("origin", img);
Mat out = channel_swap(img);
imshow("sample", out);
waitKey(0);
return 0;
}
结果显示
原图
结果