四、自定义图像处理类(附灰度变换)

自定义图像处理类

一、序言:在图像处理的学习过程中,我们会经常使用到C++中比较著名的一些图像处理库,如OpenCVOpenGL等。今天,我们就来实现自己的图像处理类MyCV

二、补充:改教材中的MyCV类是基于前面教程中的MyImage类,构建MyCV时需要关联相应文件

三、今天我们先实现一个简单的图像灰度化方法,更多的图像处理方法会在今后补充。

四、详细步骤

1.方法的定义

static MyImage* Gray(MyImage const &Scr);

2.方法的实现

// 将图像转换为灰度图像

扫描二维码关注公众号,回复: 19062 查看本文章
MyImage* MyCV::Gray(MyImage const &Scr)

{

    if(Scr.m_format == MyImage::format::GRAY8)

         return new MyImage(Scr);

 

    else if(Scr.m_format == MyImage::format::RGB32)

    {

        int width = Scr.m_width;

        int height = Scr.m_height;

        int bytesPerLine = (width*8 +31)/32*4;

        unsigned char* scrdata = Scr.m_data;

 

        unsigned char *data = new unsigned char[bytesPerLine*height];

 

        for(int i=0;i<height;i++)

            for(int j=0;j<width;j++)

            {

                // 灰度公式

                int gray = (int)(scrdata[2] * 0.3 + scrdata[1] * 0.59 + scrdata[0] * 0.11);

 

                data[i*bytesPerLine+j]  = gray;

 

                scrdata+=4;

            }

 

        return new MyImage(data,width,height,MyImage::format::GRAY8);

    }

}

图像处理类MyCV最基本的功能就完成了。

如果上述教程或代码中有任何错误,欢迎批评和指证。

猜你喜欢

转载自www.cnblogs.com/akakakkk/p/8595052.html