一、序言:在图像处理的学习过程中,我们会经常使用到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最基本的功能就完成了。