图像处理之通道交换

通道交换


问题描述:读取图像,然后将 RGB \text{RGB} RGB通道替换成 BGR \text{BGR} BGR通道。

代码如下(示例):

#include <opencv2/opencv.hpp>

// 通道交换
cv::Mat channel_swap(cv::Mat img)
{
    int width = img.cols;
    int height = img.rows;

    cv::Mat new_image = cv::Mat::zeros(height, width, CV_8UC3);

    for (int i = 0; i < height; ++i){
        for (int j = 0; j < width; ++j){
            // R -> B
            new_image.at<cv::Vec3b>(i, j)[0] = img.at<cv::Vec3b>(i, j)[2];
            new_image.at<cv::Vec3b>(i, j)[2] = img.at<cv::Vec3b>(i, j)[0];
            new_image.at<cv::Vec3b>(i, j)[1] = img.at<cv::Vec3b>(i, j)[1];
        }
    }

    return new_image;
}

int main()
{
    // read image 在读取相对路径的图像时,要采用../, ./会报错
    cv::Mat img = cv::imread("../Neopolitan.png", cv::IMREAD_COLOR);
//    cv::Mat img = cv::imread("../Neopolitan.png", cv::IMREAD_GRAYSCALE);
//    cv::Mat img = cv::imread("../Neopolitan.png",  cv::IMREAD_UNCHANGED);

//    cv::imshow("Neopolitan", img);
    
    cv::Mat new_image = channel_swap(img);

    cv::imwrite("../1-10/Neopolitan1.png", new_image);
    cv::imshow("Neopolitan", new_image);
    cv::waitKey(0);
    cv::destroyAllWindows();

    return 0;
}
输入图像 (Neopolitan.png)输出图像 (Neopolitan1.png)
在这里插入图片描述在这里插入图片描述

读取图像

cv::imread()函数用于读取图像。针对函数的第二个参数,通过以下几个例子分别说明各自功能。

  • cv::IMREAD_COLOR:默认参数,以彩色模式加载图像,图像的透明度将被忽略。
  • cv::IMREAD_GRAYSCALE:以灰度模式加载图像。
  • cv::IMREAD_UNCHANGED:以alpha通道模式加载图像。

显示图像

cv::imshow()函数被用于在窗口中显示图像,窗口会自动适应图像大小。 其中,函数的第一个参数是窗口的名称,是字符串类型。第二个参数是要加载的图像。你可以显示多个图像窗口,但是每个窗口名称必须不同

保存图像

cv::imwrite()函数用于保存图像。其中第一个参数是保存为的图片名,第二个参数为待保存图像。

cv::waitKey()是一个键盘事件函数,它的参数以毫秒为单位,该函数在毫秒的时间内去等待键盘事件,如果时间之内有键盘事件触发则程序继续,如果函数参数设置为0,则无限时间的等待键盘事件触发。它也可以设置为检测指定按键的触发,比如等待按键a的触发,我们将在下面讨论。

注意:这个函数除了可以等待键盘事件的触发之外还可以处理很多其他的GUI事件,所以你必须把它放在显示图像函数之后。

cv::destroyAllWindow()函数用于关闭我们所创建的所有显示图像的窗口,如果想要关闭特定的窗口,请使用cv.destroyWindow()函数,把要关闭的窗口名称作为参数。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值