题目:将RGB通道替换为BGR通道。
采用国际标准测试图像LenaRGB。
C++代码:
cv::Mat rgbImage = cv::imread("LenaRGB.bmp");
int width = rgbImage.cols;
int height = rgbImage.rows;
cv::Mat bgrImage = cv::Mat::zeros(height, width, CV_8UC3); //高,宽,类型
for (int i = 0; i < height; i++)
{
for (int j = 0; j < width; j++)
{
bgrImage.at<cv::Vec3b>(i, j)[0] = rgbImage.at<cv::Vec3b>(i, j)[2];
bgrImage.at<cv::Vec<uchar,3>>(i, j)[1] = rgbImage.at<cv::Vec3b>(i, j)[1];
bgrImage.at<cv::Vec3b>(i, j)[2] = rgbImage.at<cv::Vec3b>(i, j)[0];
}
}
结果如图:
opencv中的常见类型如下所示,在使用opencv时,我们要将常规类型转化为Opencv类型。每个类型可以有单通道、双通道、三通道。
这里的Vec类型其实就是vector(向量)。
在代码中可以看出cv::Vec3b等于cv::Vec<uchar,3>,这里只不过是typedef重定义了一下。
如果是灰度图像,我们可以采用image.at< uchar >(i, j)来获取该位置的像素,也可以将uchar替换为CV_8U。
参考链接:http://zhaoxuhui.top/blog/2019/08/24/OpenCV-Mat-Note.html
https://github.com/gzr2017/ImageProcessing100Wen