图像灰度处理效果
代码如下
int iwidget = newImage.width();//图像宽
int iheight = newImage.height();//图像高
int bytePerLine=(iwidget*24+31)/8;//图像每行字节对齐
unsigned char *data = image.bits();//获取图像像素字节数据的首地址
//这里要注意,采用bits()方法的到的数据data中像素的组织形式应为ARGB,但实际调试中发现,
//每个像素中从字节从低到高依次是BGRA,
unsigned char * graydata = new unsigned char[bytePerLine * iheight];//存储处理后的数据
unsigned char r,g,b;
for(int i=0;i<iheight;i++)
{
for (int j=0;j<iwidget;j++)
{
r = *(data+2);
g = *(data+1);
b = *data;
//设置灰度值 rgb转换灰度值是存在固定的公式的
graydata[i*bytePerLine+j*3] =(r*30+g*59+b*11)/100;
graydata[i*bytePerLine+j*3+1]=(r*30+g*59+b*11)/100;
graydata[i*bytePerLine+j*3+2]=(r*30+g*59+b*11)/100;
data+=4;
}
}
image = QImage(graydata, iwidget,iheight,bytePerLine , QImage::Format_RGB888);
imageLabel->setPixmap(QPixmap::fromImage(image));
程序下载地址
说明: 打开图像后默直接显示灰度图像
图像灰度显示工具