基于QT的图像处理软件

2015/07/27 个人项目

本项目主要是基于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();
}

Search

    Post Directory