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 <iostream>
#include <string>

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
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39

四、解释

1、读入图片

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

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

2、读取图片失败

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

读取失败则返回。

3、显示图片

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

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

4、转化为灰度图

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

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

5、把图片写到文件中

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

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

6、程序结束

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

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

五、结果

程序运行结果如下: 
这里写图片描述


http://blog.csdn.net/ab1322583838/article/details/52047611


  • 1
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值