欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

四、自定义图像处理类

程序员文章站 2022-05-04 13:25:31
自定义图像处理类 一、序言:在图像处理的学习过程中,我们会经常使用到C++中比较著名的一些图像处理库,如OpenCV、OpenGL等。今天,我们就来实现自己的图像处理类MyCV。 二、补充:改教材中的MyCV类是基于前面教程中的MyImage类,构建MyCV时需要关联相应文件 三、今天我们先实现一个 ......

自定义图像处理类

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

 

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

 

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

 

四、详细步骤

1.方法的定义

static MyImage* Gray(MyImage const &Scr);

 

2.方法的实现

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

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最基本的功能就完成了。

 

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