OPENCV入门教程三:cvtColor彩色图转灰度图

一、目标

本博客教您怎样使用cvtColor函数将彩色图片转化成灰度图片。

二、函数说明

void cvtColor(InputArray src, OutputArray dst, int code, int dstCn=0 )
src和dst分别是待转的图像(src)和待转图像转换后的图像(dst);code是一个掩码,表示由src到dst之间是怎么转的,比如是彩色转为灰度,还是彩色转为HSI模式;最后的dstCn表示dst图像的波段数,这个值默认是0,它可以从参数code中推断。
code的模式包括:
CV_RGB2GRAY:<彩色图像转灰度图像>,
CV_BGR2YCrCb:<彩色图像转YCrCb图像>,
CV_RGB2YCrCb
CV_YCrCb2BGR
CV_YCrCb2RGB
CV_BGR2HSV
CV_RGB2HSV
CV_HSV2BGR
CV_HSV2RGB

三、程序代码

#include "cv.h"                             //  OpenCV 文件头
#include "highgui.h"
#include "cvaux.h"
#include "cxcore.h"
#include "opencv2/opencv.hpp"
#include "opencv2/imgproc.hpp"
#include 
#include 

using namespace cv;
using namespace std;

int main()
{
    string imageName("C:\\Users\\lidabao\\Desktop\\Lena.bmp"); // 图片在电脑中的绝对地址

    Mat image, resImage;//Mat是OpenCV最基本的数据结构,这是定义一个图像矩阵类型

    image = imread(imageName.c_str(), IMREAD_COLOR);//读入图片数据

    if (image.empty())//读取失败时
    {
        cout << "Could not open or find the image" << std::endl;
        return -1;
    }

    namedWindow("原图", WINDOW_AUTOSIZE); // 创建一个窗口
    imshow("原图", image);    // 在窗口中显示图片

    cvtColor(image, resImage, CV_RGB2GRAY);//把图片转化为灰度图

    //把图片写入到图片中
    imwrite("C:\\Users\\lidabao\\Desktop\\Lena1.bmp", resImage);

    namedWindow("灰度图", WINDOW_AUTOSIZE); // 创建一个窗口
    imshow("灰度图", resImage);    // 在窗口中显示图片
    waitKey(0); // 等待一次按键,程序结束
    return 0;
}

四、解释

1、读入图片

image = imread(imageName.c_str(), IMREAD_COLOR);//读入图片数据

imread()第一个参数是图片的绝对地址,第二个参数是以什么类型的图片读入

2、读取图片失败

if (image.empty())//读取失败时
    {
        cout << "Could not open or find the image" << std::endl;
        return -1;
    }

读取失败则返回。

3、显示图片

namedWindow("原图", WINDOW_AUTOSIZE); // 创建一个窗口
imshow("原图", image);    // 在窗口中显示图片

namedWindow创建一个窗口,namedWindow()第一个参数给窗口起个名字,第二个参数的为0和1
WINDOW_AUTOSIZE=1;WINDOW_NORMAL=0;
imshow(),第一个参数的名字为窗口的名字,第二个参数是要显示的图片。

4、转化为灰度图

cvtColor(image, resImage, CV_RGB2GRAY);//把图片转化为灰度图

cvtColor第一个参数为原图片
第二个参数为目的图片
第三个参数为转化的掩码,表示转化的方向

5、把图片写到文件中

imwrite("C:\\Users\\lidabao\\Desktop\\Lena1.bmp", resImage);

imwrite()第一个参数为要存储文件的绝对地址。
第二个参数为要存储的文件。

6、程序结束

waitKey(0); // 等待一次按键,程序结束

等待一次按键,程序结束。

五、结果

程序运行结果如下:
OPENCV入门教程三:cvtColor彩色图转灰度图_第1张图片

你可能感兴趣的:(OPENCV入门教程)