本项目主要是基于C++界面开发库QT平台来读入图像,通过QLabel窗体部件来显示图像,创建一个QImage的类,使用QRgb设置颜色表,setPixel设置像素值,使用setPixmap把QImage类加载到QLable来显示图像。图像处理功能主要包括图像水平镜像,垂直镜像,以及二值化等功能。
打开图像
void ImgProcessor::slotOpenFile()
{
QString s = QFileDialog::getOpenFileName(this, "open image file",".",
"Image files (*.bmp *.jpg *.pbm *.pgm *.png *.ppm *.xbm *.xpm);;All files (*.*)");
if(s != "")
{
if(img.load(s));
{
imageLabel->setPixmap (QPixmap::fromImage(img));
resize(600, 600);
}
}
}
水平镜像
void ImgProcessor::slotMirrorHorizontal()
{
if(img.isNull())
{
return;
}
uint firstDP;
QImage grayImg=QImage(img.width(),img.width(),QImage::Format_Indexed8); //重新创建一个QImage的类
grayImg.setColorCount(256); //设置颜色为256种颜色
int depth=img.depth();
QRgb rgb;
for(int i = 0; i < 256; i++)
{
rgb=qRgb(i,i,i);
grayImg.setColor(i,rgb); //设置颜色表
}
//QRgb px;
for(int i=5;i<img.width();i++)
{
for(int j=5;j<img.height();j++)
{
firstDP = (uint)qRed(img.pixel(img.width()-i,j));
//px=img.pixel(i,j);
//firstDP=(uint)(qRed(px)*30 +qGreen(px)*59 + qBlue(px)*11 + 50) / 100;
grayImg.setPixel(i,j,firstDP);
}
}
imageLabel->setPixmap (QPixmap::fromImage(grayImg));
//img = grayImg;
resize(600,600);
//grayImg.save("grayImg.bmp","bmp");
}
竖直镜像
void ImgProcessor::slotMirrorVertical()
{
if(img.isNull())
{
return;
}
uint firstDP;
QImage grayImg=QImage(img.width(),img.width(),QImage::Format_Indexed8); //重新创建一个QImage的类
grayImg.setColorCount(256); //设置颜色为256种颜色
int depth=img.depth();
QRgb rgb;
for(int i = 0; i < 256; i++)
{
rgb=qRgb(i,i,i);
grayImg.setColor(i,rgb); //设置颜色表
}
for(int i=5;i<img.width();i++)
{
for(int j=5;j<img.height();j++)
{
firstDP = (uint)qRed(img.pixel(i,img.height()-j));
grayImg.setPixel(i,j,firstDP);
}
}
imageLabel->setPixmap (QPixmap::fromImage(grayImg));
//img = grayImg;
resize(600,600);
}
二值化处理
void ImgProcessor::slotBinaryTran()
{
if(img.isNull())
{
return;
}
uint firstDP;
QImage grayImg=QImage(img.width(),img.width(),QImage::Format_Indexed8); //重新创建一个QImage的类
grayImg.setColorCount(256); //设置颜色为256种颜色
int depth=img.depth();
QRgb rgb;
for(int i = 0; i < 256; i++)
{
rgb=qRgb(i,i,i);
grayImg.setColor(i,rgb); //设置颜色表
}
for(int i=5;i<img.width();i++)
{
for(int j=5;j<img.height();j++)
{
firstDP = (uint)qRed(img.pixel(i,j));
if(firstDP <=100)
{
grayImg.setPixel(i,j,0);
}
else
{
grayImg.setPixel(i,j,255);
}
}
}
imageLabel->setPixmap (QPixmap::fromImage(grayImg));
//img = grayImg;
resize(600,600);
binarydialog = new BinaryDlg;
binarydialog->show();
}