1.介绍
在日常生活中,我们经常看到的图片是彩色图片,有时我们需要将彩色图片转换成灰度图片来处理,也就是将RGB三通道图片按照一定规则转换成一通道图片。
2.转换方式
彩色图片转灰度图片,一般有三种方法
第一种:平均法
I = 1/3 * (R + G + B)
第二种:最大最小平均法
I= 0.5 * max(R, G, B)+ 0.5 * min(R, G, B)
第三种:加权平均法
I = 0.3 * R +0.59 * G+ 0.11 * B
3.代码实现(代码是我以前自学图像处理时写的,代码很粗糙没做任何优化,但很好理解)
只实现了方法1的算法,其它两种算法,是很容易基于此代码而改写出来:
QImage* MainWindow::greyScale(QImage* origiin)
{QImage* newImage = new QImage(origiin->width(), origiin->height(), QImage::Format_ARGB32);QColor oldColor;for(int y = 0; y < newImage->height(); y++){for(int x = 0; x < newImage->width(); x++){oldColor = QColor(origiin->pixel(x,y));int average = (oldColor.red() + oldColor.green() + oldColor.blue()) / 3;newImage->setPixel(x, y, qRgb(average, average, average));}}return newImage;
}
c++ opencv中,转灰度:
cvtColor(src_color, src_gray, COLOR_BGR2GRAY)
python opencv中,转灰度:
cv2.cvtColor(img,cv2.COLOR_RGB2GRAY)
4.参考资料:
数字图像处理——技术详解与Visual C++实践(左飞等著),写代码与写博客的时间相差两年,至于还参考其他的资料不,我已经忘记了,如若需要,我可以补上去