四、自定义图像处理类
程序员文章站
2022-05-04 13:25:31
自定义图像处理类 一、序言:在图像处理的学习过程中,我们会经常使用到C++中比较著名的一些图像处理库,如OpenCV、OpenGL等。今天,我们就来实现自己的图像处理类MyCV。 二、补充:改教材中的MyCV类是基于前面教程中的MyImage类,构建MyCV时需要关联相应文件 三、今天我们先实现一个 ......
自定义图像处理类
一、序言:在图像处理的学习过程中,我们会经常使用到C++中比较著名的一些图像处理库,如OpenCV、OpenGL等。今天,我们就来实现自己的图像处理类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最基本的功能就完成了。
如果上述教程或代码中有任何错误,欢迎批评和指证。