一杯清酒邀明月
天下本无事,庸人扰之而烦耳。

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

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

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

四、详细步骤

1.方法的定义

static MyImage* Gray(MyImage const &Scr);

2.方法的实现

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

 1 MyImage* MyCV::Gray(MyImage const &Scr)
 2 {
 3     if(Scr.m_format == MyImage::format::GRAY8)
 4          return new MyImage(Scr);
 5     else if(Scr.m_format == MyImage::format::RGB32)
 6     {
 7         int width = Scr.m_width;
 8         int height = Scr.m_height;
 9         int bytesPerLine = (width*8 +31)/32*4;
10         unsigned char* scrdata = Scr.m_data;
11         unsigned char *data = new unsigned char[bytesPerLine*height];
12 
13         for(int i=0;i<height;i++)
14             for(int j=0;j<width;j++)
15             {
16                 // 灰度公式
17                 int gray = (int)(scrdata[2] * 0.3 + scrdata[1] * 0.59 + scrdata[0] * 0.11);
18                 data[i*bytesPerLine+j]  = gray;
19                 scrdata+=4;
20             }
21 
22         return new MyImage(data,width,height,MyImage::format::GRAY8);
23     }
24 }

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

posted on 2022-02-21 13:48  一杯清酒邀明月  阅读(421)  评论(0编辑  收藏  举报