OpenCV简单的图像灰度化

OpenCV简单的图像灰度化

图像灰度化算是数字图像处理中很简单的操作了,这里使用OpenCV简单尝试一下。

简单粗暴的方法:
最简单粗暴的方法只需要一行代码,如下:

Mat mat = imread("Image.jpg", IMREAD_GRAYSCALE);

其中,第一个为图像文件的储存路径,第二个为打开图像的模式。模式总共有以下几种:

enum ImreadModes {
       IMREAD_UNCHANGED            = -1,//啥都不做,该咋样咋样
       IMREAD_GRAYSCALE            = 0,//转换成灰度图
       IMREAD_COLOR                = 1, //转换成3通道RGB颜色
       IMREAD_ANYDEPTH             = 2,//
       IMREAD_ANYCOLOR             = 4,//加载所有支持的格式,不转换
       IMREAD_LOAD_GDAL            = 8,
       IMREAD_REDUCED_GRAYSCALE_2  = 16, 
       IMREAD_REDUCED_COLOR_2      = 17,
       IMREAD_REDUCED_GRAYSCALE_4  = 32, 
       IMREAD_REDUCED_COLOR_4      = 33, 
       IMREAD_REDUCED_GRAYSCALE_8  = 64, 
       IMREAD_REDUCED_COLOR_8      = 65,
       IMREAD_IGNORE_ORIENTATION   = 128
     };

其中,IMREAD_UNCHANGED代表啥都不做,该咋样咋样,IMREAD_GRAYSCALE代表转换成灰度图,IMREAD_COLOR代表转换成3通道RGB颜色图,IMREAD_ANYDEPTH代表如果图像是16/32位的,则原样输出,否则转换为8位灰度图,IMREAD_ANYCOLOR代表加载所有支持的格式,不转换。
因此,只要选择灰度模式,OpenCV就会自动将图片转换为单通道的灰度图,我们就可以直接使用啦~
不过使用OpenCV提供好的代码有点Low,还是自己写吧~


自食其力的方法:
首先要确定RBG通道转换成灰度值的公式:

Gray = (11 * B + 59 * G + 30 * R + 50) / 100;

使用这一公式避免了小数计算,速度比较快。接下来,就可以逐个像素的修改颜色了。首先需要建立一个和原图像大小相等的灰度图像,并且该图像的通道是8位的:

Mat matGray(mat.rows, mat.cols, CV_8UC1);

然后一行行修改,使用ptr()方法获取每一行的头指针:

for (size_t idx = 0; idx < mat.rows; idx++)
{
    uchar *ptr = mat.ptr<uchar>(idx);
    uchar *newPtr = matGray.ptr<uchar>(idx);
    for (size_t subIdx = 0; subIdx < mat.cols; subIdx++)
    {
        newPtr[subIdx] = (11 * ptr[subIdx * 3] + 59 * ptr[subIdx * 3 + 1]
                            + 30 * ptr[subIdx * 3 + 2] + 50) / 100;
    }
}

至此灰度化就搞定啦,效果还是不错的~虽说灰度化很简单,但毕竟是数字图像处理入门的第一步嘛~
以此纪念我在数字图像处理上的第一篇文章~

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值