http://pandownload.com/document/clouddl.html
qq:609162385
.h文件
-
#ifndef MAINWINDOW_H
-
#define MAINWINDOW_H
-
-
#include <QMainWindow>
-
#include <QSpinBox>
-
#include <QPushButton>
-
#include <QImage>
-
#include <QDoubleSpinBox>
-
namespace Ui {
-
class MainWindow;
-
}
-
-
class MainWindow :
public QMainWindow
-
{
-
Q_OBJECT
-
-
public:
-
explicit MainWindow(QWidget *parent = 0);
-
~MainWindow();
-
void imageSharpening();
-
void imageGray();
-
QImage qImageToGray();
-
-
void YanMo2(int *tmpPixel, int width, int height);
-
void YanMo1(int *tmpPixel, int width, int height);
-
void MoreClearPic(QRgb *tmpPixel,int yanKind,int width,int height);
-
void DecreseVoice();
-
void SobelGet();
-
void Template(QImage &SobelImage);
-
QImage * saturation(int delta, QImage * origin);
-
QImage * blur(QImage * origin);
-
QImage * sharpen(QImage * origin);
-
void cool();
-
void brightness();
-
void directionalGray();
-
void filter();
-
void define(QImage);
-
void MakePicAverage();
-
private:
-
Ui::MainWindow *ui;
-
QImage *image;
-
-
};
-
-
#endif // MAINWINDOW_H
.cpp文件
-
#include "mainwindow.h"
-
#include "ui_mainwindow.h"
-
#include <QDebug>
-
-
MainWindow::MainWindow(QWidget *parent) :
-
QMainWindow(parent),
-
ui(
new Ui::MainWindow)
-
{
-
ui->setupUi(
this);
-
QImage aImage = qImageToGray();
-
define(aImage);
-
-
-
//MakePicAverage();
-
//brightness();
-
//imageSharpening();
-
//imageGray();
-
//filter();
-
//directionalGray();
-
}
-
-
MainWindow::~MainWindow()
-
{
-
delete ui;
-
}
-
//图像锐化
-
void MainWindow::imageSharpening()
-
{
-
int betterValue =
5;
-
image =
new QImage(
"C:\\Users\\Administrator\\Desktop\\QTsucai\\piliexian.jpg");
-
QImage ImageBetter;
-
ImageBetter = QImage(image->width(),image->height(),QImage::Format_ARGB32);
-
int i,j;
-
int r,g,b,tmpR,tmpG,tmpB;
-
QRgb rgb00,rgb01,rgb10;
-
int width = image->width();
-
int height = image->height();
-
for(i =
0;i < width;i++)
-
{
-
for(j =
0;j < height;j++)
-
{
-
if(image->valid(i,j)&&image->valid(i+
1,j)&&image->valid(i,j+
1))
-
{
-
rgb00 = image->pixel(i,j);
//获取rgb
-
rgb01 = image->pixel(i,j+
1);
-
rgb10 = image->pixel(i+
1,j);
-
r = qRed(rgb00);
-
g = qGreen(rgb00);
-
b = qBlue(rgb00);
-
tmpR =
abs(qRed(rgb00)-qRed(rgb01))+
abs(qRed(rgb00)-qRed(rgb10));
-
tmpG =
abs(qGreen(rgb00)-qGreen(rgb01))+
abs(qGreen(rgb00)-qGreen(rgb10));
-
tmpB =
abs(qBlue(rgb00)-qBlue(rgb01))+
abs(qBlue(rgb00)-qBlue(rgb10));
-
if((tmpR+
120) <
255)
-
{
-
if(tmpR > betterValue)
-
{
-
r = tmpR+
120;
-
}
-
}
-
else
-
{
-
r =
255;
-
}
-
-
if((tmpG +
120) <
255)
-
{
-
if(tmpG > betterValue)
-
{
-
g = tmpG+
120;
-
}
-
}
-
else
-
{
-
g =
255;
-
}
-
-
if((tmpB +
120) <
255)
-
{
-
if(tmpB > betterValue)
-
{
-
b = tmpB+
120;
-
}
-
}
-
else
-
{
-
b =
255;
-
}
-
ImageBetter.setPixel(i,j,qRgb(r,g,b));
-
}
-
}
-
}
-
ui->label_2->resize(ImageBetter.width(),ImageBetter.height());
-
ui->label_2->setPixmap(QPixmap::fromImage(ImageBetter));
-
}
-
//转灰度图
-
QImage MainWindow::qImageToGray()
-
{
-
image =
new QImage(
"C:\\Users\\Administrator\\Desktop\\QTsucai\\timg.jpg");
-
int height = image->height();
-
int width = image->width();
-
-
QImage ret(width, height, QImage::Format_Indexed8);
-
ret.setColorCount(
256);
-
for(
int i =
0; i <
256; i++)
-
{
-
ret.setColor(i, qRgb(i, i, i));
-
}
-
switch(image->format())
-
{
-
case QImage::Format_Indexed8:
-
for(
int i =
0; i < height; i ++)
-
{
-
const uchar *pSrc = (uchar *)image->constScanLine(i);
-
uchar *pDest = (uchar *)ret.scanLine(i);
-
memcpy(pDest, pSrc, width);
-
}
-
break;
-
case QImage::Format_RGB32:
-
case QImage::Format_ARGB32:
-
case QImage::Format_ARGB32_Premultiplied:
-
for(
int i =
0; i < height; i ++)
-
{
-
const QRgb *pSrc = (QRgb *)image->constScanLine(i);
-
uchar *pDest = (uchar *)ret.scanLine(i);
-
-
for(
int j =
0; j < width; j ++)
-
{
-
pDest[j] = qGray(pSrc[j]);
-
}
-
}
-
break;
-
}
-
return ret;
-
}
-
//饱和度
-
void MainWindow::cool()
-
{
-
int delta =
30;
-
image =
new QImage(
"C:\\Users\\Administrator\\Desktop\\QTsucai\\timg.jpg");
-
QImage *newImage =
new QImage(image->width(), image->height(), QImage::Format_ARGB32);
-
-
QColor oldColor;
-
int r,g,b;
-
-
for(
int x=
0; x<newImage->width(); x++){
-
for(
int y=
0; y<newImage->height(); y++){
-
oldColor = QColor(image->pixel(x,y));
-
-
r = oldColor.red() + delta;
-
g = oldColor.green() + delta;
-
b = oldColor.blue();
-
-
//we check if the new values are between 0 and 255
-
// r = qBound(0, r, 255);
-
// g = qBound(0, g, 255);
-
b = qBound(
0, b,
255);
-
newImage->setPixel(x,y, qRgb(r,g,b));
-
}
-
}
-
ui->label_2->resize(newImage->width(),newImage->height());
-
ui->label_2->setPixmap(QPixmap::fromImage(*newImage));
-
}
-
//饱和度
-
QImage * MainWindow::saturation(
int delta, QImage * origin){
-
QImage * newImage =
new QImage(origin->width(), origin->height(), QImage::Format_ARGB32);
-
-
QColor oldColor;
-
QColor newColor;
-
int h,s,l;
-
-
for(
int x=
0; x<newImage->width(); x++){
-
for(
int y=
0; y<newImage->height(); y++){
-
oldColor = QColor(origin->pixel(x,y));
-
-
newColor = oldColor.toHsl();
-
h = newColor.hue();
-
s = newColor.saturation()+delta;
-
l = newColor.lightness();
-
-
//we check if the new value is between 0 and 255
-
s = qBound(
0, s,
255);
-
-
newColor.setHsl(h, s, l);
-
-
newImage->setPixel(x, y, qRgb(newColor.red(), newColor.green(), newColor.blue()));
-
}
-
}
-
-
return newImage;
-
}
-
//模糊
-
QImage * MainWindow::blur(QImage * origin){
-
QImage * newImage =
new QImage(*origin);
-
-
int kernel [
5][
5]= {{
0,
0,
1,
0,
0},
-
{
0,
1,
3,
1,
0},
-
{
1,
3,
7,
3,
1},
-
{
0,
1,
3,
1,
0},
-
{
0,
0,
1,
0,
0}};
-
int kernelSize =
5;
-
int sumKernel =
27;
-
int r,g,b;
-
QColor color;
-
-
for(
int x=kernelSize/
2; x<newImage->width()-(kernelSize/
2); x++){
-
for(
int y=kernelSize/
2; y<newImage->height()-(kernelSize/
2); y++){
-
-
r =
0;
-
g =
0;
-
b =
0;
-
-
for(
int i = -kernelSize/
2; i<= kernelSize/
2; i++){
-
for(
int j = -kernelSize/
2; j<= kernelSize/
2; j++){
-
color = QColor(origin->pixel(x+i, y+j));
-
r += color.red()*kernel[kernelSize/
2+i][kernelSize/
2+j];
-
g += color.green()*kernel[kernelSize/
2+i][kernelSize/
2+j];
-
b += color.blue()*kernel[kernelSize/
2+i][kernelSize/
2+j];
-
}
-
}
-
-
r = qBound(
0, r/sumKernel,
255);
-
g = qBound(
0, g/sumKernel,
255);
-
b = qBound(
0, b/sumKernel,
255);
-
-
newImage->setPixel(x,y, qRgb(r,g,b));
-
-
}
-
}
-
return newImage;
-
}
-
//锐化
-
QImage * MainWindow::sharpen(QImage * origin){
-
QImage * newImage =
new QImage(* origin);
-
-
int kernel [
3][
3]= {{
0,
-1,
0},
-
{
-1,
5,
-1},
-
{
0,
-1,
0}};
-
int kernelSize =
3;
-
int sumKernel =
1;
-
int r,g,b;
-
QColor color;
-
-
for(
int x=kernelSize/
2; x<newImage->width()-(kernelSize/
2); x++){
-
for(
int y=kernelSize/
2; y<newImage->height()-(kernelSize/
2); y++){
-
-
r =
0;
-
g =
0;
-
b =
0;
-
-
for(
int i = -kernelSize/
2; i<= kernelSize/
2; i++){
-
for(
int j = -kernelSize/
2; j<= kernelSize/
2; j++){
-
color = QColor(origin->pixel(x+i, y+j));
-
r += color.red()*kernel[kernelSize/
2+i][kernelSize/
2+j];
-
g += color.green()*kernel[kernelSize/
2+i][kernelSize/
2+j];
-
b += color.blue()*kernel[kernelSize/
2+i][kernelSize/
2+j];
-
}
-
}
-
-
r = qBound(
0, r/sumKernel,
255);
-
g = qBound(
0, g/sumKernel,
255);
-
b = qBound(
0, b/sumKernel,
255);
-
-
newImage->setPixel(x,y, qRgb(r,g,b));
-
-
}
-
}
-
return newImage;
-
}
-
//亮度调节
-
void MainWindow::brightness()
-
{
-
int delta =
30;
-
image =
new QImage(
"C:\\Users\\Administrator\\Desktop\\QTsucai\\timg.jpg");
-
QImage *newImage =
new QImage(image->width(), image->height(), QImage::Format_ARGB32);
-
-
QColor oldColor;
-
int r,g,b;
-
-
for(
int x=
0; x<newImage->width(); x++){
-
for(
int y=
0; y<newImage->height(); y++){
-
oldColor = QColor(image->pixel(x,y));
-
-
r = oldColor.red() + delta;
-
g = oldColor.green() + delta;
-
b = oldColor.blue();
-
-
//we check if the new values are between 0 and 255
-
r = qBound(
0, r,
255);
-
g = qBound(
0, g,
255);
-
-
newImage->setPixel(x,y, qRgb(r,g,b));
-
}
-
}
-
ui->label_2->resize(newImage->width(),newImage->height());
-
ui->label_2->setPixmap(QPixmap::fromImage(*newImage));
-
}
-
//灰度
-
void MainWindow::directionalGray()
-
{
-
image=
new QImage(
"C:\\Users\\Administrator\\Desktop\\QTsucai\\people.jpg");
-
QImage ImageBetter;
-
ImageBetter = QImage(image->width(),image->height(),QImage::Format_ARGB32);
-
int i,j;
-
int r,g,b;
-
QRgb rgb00,rgb01,rgb10;
-
int width = image->width();
-
int height = image->height();
-
int threshold =
200;
-
for(i =
0;i<width;i++)
-
{
-
int ta =
0, tr =
0, tg =
0, tb =
0;
-
for(j =
0;j < height;j++)
-
{
-
if(image->valid(i,j)&&image->valid(i+
1,j)&&image->valid(i,j+
1))
-
{
-
rgb00 = image->pixel(i,j);
//获取rgb
-
ta = (rgb00 >>
24) &
0xff;
-
tr = (rgb00 >>
16) &
0xff;
-
tg = (rgb00 >>
8) &
0xff;
-
tb = rgb00 &
0xff;
-
int gray = (
int)(
0.299 * (
double)tr +
0.587 * (
double)tg +
0.114 * (
double)tb);
-
double distance = qRgb(tr, tg, tb);
-
if(distance < threshold) {
-
rgb01 = qRgba(tr, tg, tb, gray);
-
tr = qRed(rgb01);
-
tg = qGreen(rgb01);
-
tb = qBlue(rgb01);
-
rgb10 = (ta <<
24) | (tr <<
16) | (tg <<
8) | tb;
-
r = qRed(rgb10);
-
g = qGreen(rgb10);
-
b = qBlue(rgb10);
-
ImageBetter.setPixel(i,j,qRgb(r,g,b));
-
}
-
else {
-
rgb10 = (ta <<
24) | (gray <<
16) | (gray <<
8) | gray;
-
r = qRed(rgb10);
-
g = qGreen(rgb10);
-
b = qBlue(rgb10);
-
ImageBetter.setPixel(i,j,qRgb(r,g,b));
-
}
-
//qRgba
-
}
-
}
-
}
-
ui->label_2->resize(ImageBetter.width(),ImageBetter.height());
-
ui->label_2->setPixmap(QPixmap::fromImage(ImageBetter));
-
}
-
//二值化
-
void MainWindow::filter()
-
{
-
image=
new QImage(
"C:\\Users\\Administrator\\Desktop\\QTsucai\\timg.jpg");
-
QImage ImageBetter;
-
ImageBetter = QImage(image->width(),image->height(),QImage::Format_ARGB32);
-
int i,j;
-
int r,g,b;
-
QRgb rgb00,rgb01;
-
int width = image->width();
-
int height = image->height();
-
double total = height * width;
-
double redSum =
0, greenSum =
0, blueSum =
0;
-
for(i =
0;i<width;i++)
-
{
-
int ta =
0, tr =
0, tg =
0, tb =
0;
-
for(j =
0;j < height;j++)
-
{
-
if(image->valid(i,j)&&image->valid(i+
1,j)&&image->valid(i,j+
1))
-
{
-
rgb00 = image->pixel(i,j);
//获取rgb
-
ta = (rgb00 >>
24) &
0xff;
-
tr = (rgb00 >>
16) &
0xff;
-
tg = (rgb00 >>
8) &
0xff;
-
tb = rgb00 &
0xff;
-
redSum += tr;
-
greenSum += tg;
-
blueSum +=tb;
-
}
-
}
-
}
-
int means = (
int)(redSum / total);
//获取阈值
-
#ifdef QT_DEBUG
-
means =
225;
-
#else
-
-
#endif
-
qDebug()<<means;
-
//
-
for(i =
0;i<width;i++)
-
{
-
int ta =
0, tr =
0, tg =
0, tb =
0;
-
for(j =
0;j < height;j++)
-
{
-
if(image->valid(i,j)&&image->valid(i+
1,j)&&image->valid(i,j+
1))
-
{
-
rgb00 = image->pixel(i,j);
//获取rgb
-
ta = (rgb00 >>
24) &
0xff;
-
tr = (rgb00 >>
16) &
0xff;
-
tg = (rgb00 >>
8) &
0xff;
-
tb = rgb00 &
0xff;
-
if(tr >=means) {
-
tr = tg = tb =
255;
-
}
else {
-
tr = tg = tb =
0;
-
}
-
rgb01 = (ta <<
24) | (tr <<
16) | (tg <<
8) | tb;
-
r = qRed(rgb01);
-
g = qGreen(rgb01);
-
b = qBlue(rgb01);
-
ImageBetter.setPixel(i,j,qRgb(r,g,b));
-
}
-
}
-
}
-
ui->label_2->resize(ImageBetter.width(),ImageBetter.height());
-
ui->label_2->setPixmap(QPixmap::fromImage(ImageBetter));
-
}
-
//自定义
-
void MainWindow::define(QImage img)
-
{
-
QImage ImageBetter;
-
ImageBetter = QImage(image->width(),image->height(),QImage::Format_ARGB32);
-
int i,j;
-
int r,g,b;
-
QRgb rgb00,rgb01,rgb10;
-
int width = image->width();
-
int height = image->height();
-
char up[
200000] = {
0};
-
char down[
200000] = {
0};
-
int upCount =
0,downCount =
0;
-
bool state =
false;
-
int jNum =
0;
-
bool jstate =
false;
-
double upNum =
0;
-
double downNum =
0;
-
int ret =
0;
-
for(i =
150;i < width -
150;i++)
-
{
-
int ta =
0, tr =
0,tr1 =
0, tg =
0, tb =
0;
-
for(j =
150;j < height -
150;j++)
-
{
-
if(image->valid(i,j)&&image->valid(i+
1,j)&&image->valid(i,j+
1))
-
{
-
char count =
0;
-
rgb00 = image->pixel(i,j);
-
tr = (rgb00 >>
16) &
0xff;
-
for(
int m =
-15;m <
15; m++)
-
{
-
rgb10 = image->pixel(i + m,j);
-
tr1 = (rgb10 >>
16) &
0xff;
-
char ch = tr - tr1;
-
if(ch >=
-1 || ch <=
1)
-
{
-
count++;
-
}
-
}
-
for(
int n =
-15;n <
15; n++)
-
{
-
rgb10 = image->pixel(i,j + n);
-
tr1 = (rgb10 >>
16) &
0xff;
-
if(tr == tr1)
-
{
-
count++;
-
}
-
}
-
if(count >
50)
-
{
-
tr = tg = tb =
255;
-
if(jstate ==
false)
-
{
-
jstate =
true;
-
jNum = j;
-
}
-
if(j - jNum >
20)
-
{
-
state =
true;
-
}
-
jNum = j;
-
if(state ==
false)
-
{
-
up[upCount++] = i;
-
}
-
else
-
{
-
down[downCount++] = i;
-
}
-
}
-
else
-
{
-
tr = tg = tb =
0;
-
}
-
-
rgb01 = (ta <<
24) | (tr <<
16) | (tg <<
8) | tb;
-
r = qRed(rgb01);
-
g = qGreen(rgb01);
-
b = qBlue(rgb01);
-
ImageBetter.setPixel(i,j,qRgb(r,g,b));
-
}
-
}
-
}
-
-
for(
int ic =
0;ic < upCount;ic++)
-
{
-
upNum += up[ic];
-
}
-
for(
int jc =
0;jc < downCount;jc++)
-
{
-
downNum += down[jc];
-
}
-
ret = upNum / upCount - downNum / downCount;
-
-
qDebug()<< ret;
-
ui->label_2->resize(ImageBetter.width(),ImageBetter.height());
-
ui->label_2->setPixmap(QPixmap::fromImage(ImageBetter));
-
}
-
//转灰度
-
void MainWindow::imageGray()
-
{
-
image=
new QImage(
"C:\\Users\\Administrator\\Desktop\\QTsucai\\1.jpg");
-
QImage ImageBetter;
-
ImageBetter = QImage(image->width(),image->height(),QImage::Format_ARGB32);
-
int i,j;
-
int r,g,b;
-
QRgb rgb00,rgb01;
-
int width = image->width();
-
int height = image->height();
-
for(i =
0;i<width;i++)
-
{
-
for(j =
0;j < height;j++)
-
{
-
if(image->valid(i,j)&&image->valid(i+
1,j)&&image->valid(i,j+
1))
-
{
-
rgb00 = image->pixel(i,j);
//获取rgb
-
#ifdef QT_DEBUG
-
unsigned
int blue = (rgb00 &
0x000000FF)>>
0;
-
unsigned
int green = (rgb00 &
0x0000FF00) >>
8;
-
unsigned
int red = (rgb00 &
0x00FF0000) >>
16;
-
#else
-
unsigned
int blue = (rgb00 >>
0) &
0xff;
-
unsigned
int green = (rgb00 >>
8) &
0xff;
-
unsigned
int red = (rgb00 >>
16) &
0xff;
-
#endif
-
rgb01 = ( red*
38 + green *
75 + blue *
15 )>>
7;
-
//qDebug()<<rgb01;
-
r = qRed(rgb01);
-
g = qGreen(rgb01);
-
b = qBlue(rgb01);
-
ImageBetter.setPixel(i,j,qRgb(r,g,b));
-
}
-
}
-
}
-
ui->label_2->resize(ImageBetter.width(),ImageBetter.height());
-
ui->label_2->setPixmap(QPixmap::fromImage(ImageBetter));
-
}
-
//直方图均衡化
-
void MainWindow::MakePicAverage()
-
{
-
image =
new QImage(
"C:\\Users\\Administrator\\Desktop\\QTsucai\\timg.jpg");
-
QImage ImageAverage;
-
ImageAverage=QImage(image->width(),image->height(),QImage::Format_ARGB32);
-
int i,j;
-
int width,height;
-
width=image->width();
-
height=image->height();
-
QRgb rgb;
-
int r[
256],g[
256],b[
256];
//原图各个灰度数量的统计
-
int rtmp,gtmp,btmp,rj,gj,bj;
-
float rPro[
256],gPro[
256],bPro[
256];
//原图各个灰度级的概率
-
float rTemp[
256],gTemp[
256],bTemp[
256];
//均衡化后各个灰度级的概率
-
int rJun[
256],gJun[
256],bJun[
256];
//均衡化后对应像素的值
-
memset(r,
0,
sizeof(r));
-
memset(g,
0,
sizeof(g));
-
memset(b,
0,
sizeof(b));
-
-
//获取原图各个灰度的数量
-
for(i=
0;i<width;i++)
-
{
-
for(j=
0;j<height;j++)
-
{
-
rgb=image->pixel(i,j);
-
r[qRed(rgb)]++;
-
g[qGreen(rgb)]++;
-
b[qBlue(rgb)]++;
-
}
-
}
-
-
//获取原图各个灰度级的概率
-
for(i=
0;i<
256;i++)
-
{
-
rPro[i]=(r[i]*
1.0)/(width*height);
-
gPro[i]=(g[i]*
1.0)/(width*height);
-
bPro[i]=(b[i]*
1.0)/(width*height);
-
}
-
-
//均衡化后各个灰度级的概率,同时获取均衡化后对应像素的值
-
for(i=
0;i<
256;i++)
-
{
-
if(i==
0)
-
{
-
rTemp[
0]=rPro[
0];
-
gTemp[
0]=gPro[
0];
-
bTemp[
0]=bPro[
0];
-
}
-
else
-
{
-
rTemp[i]=rTemp[i
-1]+rPro[i];
-
gTemp[i]=gTemp[i
-1]+gPro[i];
-
bTemp[i]=bTemp[i
-1]+bPro[i];
-
}
-
rJun[i]=(
int)(
255*rTemp[i]+
0.5);
-
gJun[i]=(
int)(
255*gTemp[i]+
0.5);
-
bJun[i]=(
int)(
255*bTemp[i]+
0.5);
-
}
-
-
for(i=
0;i<width;i++)
-
{
-
for(j=
0;j<height;j++)
-
{
-
rgb=image->pixel(i,j);
-
rtmp=qRed(rgb);
-
gtmp=qGreen(rgb);
-
btmp=qBlue(rgb);
-
rj=rJun[rtmp];
-
gj=gJun[gtmp];
-
bj=bJun[btmp];
-
ImageAverage.setPixel(i,j,qRgb(rj,gj,bj));
-
}
-
}
-
ui->label_2->resize(ImageAverage.width(),ImageAverage.height());
-
ui->label_2->setPixmap(QPixmap::fromImage(ImageAverage));
-
delete image;
-
}
-
//Sobel算子提取图像边界
-
void MainWindow::SobelGet()
-
{
-
image =
new QImage(
"C:\\Users\\Administrator\\Desktop\\QTsucai\\timg.jpg");
-
QImage SobelIma;
-
SobelIma=QImage(image->width(),image->height(),QImage::Format_ARGB32);
-
Template(SobelIma);
-
ui->label_2->resize(SobelIma.width(),SobelIma.height());
-
ui->label_2->setPixmap(QPixmap::fromImage(SobelIma));
-
}
-
//与算子进行卷积的函数
-
void MainWindow::Template(QImage &SobelImage)
-
{
-
int width=image->width(),height=image->height();
-
int pixelNum=width*height;
-
int i,j,k,l;
-
float rResult,gResult,bResult;
-
float sobel1[
9]={
1,
2,
1,
0,
0,
0,
-1,
-2,
-1},sobel2[
9]={
1,
0,
-1,
2,
0,
-2,
1,
0,
-1};
-
QRgb pixelOld[pixelNum],pixelTemp1[pixelNum],pixelTemp2[pixelNum];
-
int rtmp,gtmp,btmp;
-
memset(pixelTemp1,
255,pixelNum);
-
memset(pixelTemp2,
255,pixelNum);
-
QRgb tmpRgb;
-
for(j=
0;j<height;j++)
-
{
-
for(i=
0;i<width;i++)
-
{
-
tmpRgb=image->pixel(i,j);
-
pixelOld[j*width+i]=tmpRgb;
-
}
-
}
-
for(j=
1;j<height
-1;j++)
-
{
-
for(i=
1;i<width
-1;i++)
-
{
-
rResult=
0;
-
gResult=
0;
-
bResult=
0;
-
for(k=
0;k<
3;k++)
-
{
-
for(l=
0;l<
3;l++)
-
{
-
rResult+=qRed(pixelOld[(j
-1+k)*width+(i
-1+l)])*sobel1[k*
3+l];
-
gResult+=qGreen(pixelOld[(j
-1+k)*width+(i
-1+l)])*sobel1[k*
3+l];
-
bResult+=qBlue(pixelOld[(j
-1+k)*width+(i
-1+l)])*sobel1[k*
3+l];
-
}
-
}
-
rResult=(
float)
fabs(rResult);
-
gResult=(
float)
fabs(gResult);
-
bResult=(
float)
fabs(bResult);
-
if(rResult>
255)
-
{
-
rtmp=
255;
-
}
-
else
-
rtmp=(
int)(rResult+
0.5);
-
if(gResult>
255)
-
gtmp=
255;
-
else
-
gtmp=(
int)(gResult+
0.5);
-
if(bResult>
255)
-
btmp=
255;
-
else
-
btmp=(
int)(bResult+
0.5);
-
pixelTemp1[j*width+i]=qRgb(rtmp,gtmp,btmp);
-
}
-
}
-
-
for(j=
1;j<height
-1;j++)
-
{
-
for(i=
1;i<width
-1;i++)
-
{
-
rResult=
0;
-
gResult=
0;
-
bResult=
0;
-
for(k=
0;k<
3;k++)
-
{
-
for(l=
0;l<
3;l++)
-
{
-
rResult+=qRed(pixelOld[(j
-1+k)*width+(i
-1+l)])*sobel2[k*
3+l];
-
gResult+=qGreen(pixelOld[(j
-1+k)*width+(i
-1+l)])*sobel2[k*
3+l];
-
bResult+=qBlue(pixelOld[(j
-1+k)*width+(i
-1+l)])*sobel2[k*
3+l];
-
}
-
}
-
rResult=(
float)
fabs(rResult);
-
gResult=(
float)
fabs(gResult);
-
bResult=(
float)
fabs(bResult);
-
if(rResult>
255)
-
rtmp=
255;
-
else
-
rtmp=(
int)(rResult+
0.5);
-
if(gResult>
255)
-
gtmp=
255;
-
else
-
gtmp=(
int)(gResult+
0.5);
-
if(bResult>
255)
-
btmp=
255;
-
else
-
btmp=(
int)(bResult+
0.5);
-
pixelTemp2[j*width+i]=qRgb(rtmp,gtmp,btmp);
-
}
-
}
-
-
for(i=
0;i<pixelNum;i++)
-
{
-
if(pixelTemp2[i]>pixelTemp1[i])
-
pixelTemp1[i]=pixelTemp2[i];
-
}
-
for(j=
0;j<height;j++)
-
{
-
for(i=
0;i<width;i++)
-
{
-
SobelImage.setPixel(i,j,pixelTemp1[j*width+i]);
-
}
-
}
-
delete[] pixelTemp1;
-
delete[] pixelTemp2;
-
delete image;
-
}
-
//将图像的像素信息存在缓存中,并通过调用图像平滑函数更改缓存中的信息
-
void MainWindow::DecreseVoice()
-
{
-
image =
new QImage(
"C:\\Users\\Administrator\\Desktop\\QTsucai\\timg.jpg");
-
int i,j,k,num;
-
int width=image->width(),height=image->height();
-
QImage MoreClear;
-
MoreClear=QImage(width,height,QImage::Format_ARGB32);
-
num=width*height;
-
QRgb tmpPixel[num];
-
int yanKind =
125;
-
for(i=
0;i<width;i++)
-
{
-
for(j=
0;j<height;j++)
-
{
-
k=i*height+j;
-
tmpPixel[k]=image->pixel(i,j);
-
}
-
}
-
MoreClearPic(tmpPixel,yanKind,width,height);
-
for(i=
0;i<width;i++)
-
{
-
for(j=
0;j<height;j++)
-
{
-
k=i*height+j;
-
MoreClear.setPixel(i,j,tmpPixel[k]);
-
}
-
}
-
ui->label_2->resize(width,height);
-
ui->label_2->setPixmap(QPixmap::fromImage(MoreClear));
-
-
}
-
//,图形平滑函数,它通过调用相应的平滑化函数实现图像的不同平滑化
-
void MainWindow::MoreClearPic(QRgb *tmpPixel,
int yanKind,
int width,
int height)
-
{
-
int i,j,k;
-
int num=width*height;
-
int rtmpPixel[num],gtmpPixel[num],btmpPixel[num];
-
for(i=
0;i<width;i++)
-
{
-
for(j=
0;j<height;j++)
-
{
-
k=i*height+j;
-
rtmpPixel[k]=qRed(tmpPixel[k]);
-
gtmpPixel[k]=qGreen(tmpPixel[k]);
-
btmpPixel[k]=qBlue(tmpPixel[k]);
-
}
-
}
-
if(yanKind==
1)
-
{
-
YanMo1(rtmpPixel,width,height);
-
YanMo1(gtmpPixel,width,height);
-
YanMo1(btmpPixel,width,height);
-
}
-
if(yanKind==
2)
-
{
-
YanMo2(rtmpPixel,width,height);
-
YanMo2(gtmpPixel,width,height);
-
YanMo2(btmpPixel,width,height);
-
}
-
/*if(yanKind==3)
-
{
-
YanMo3(rtmpPixel,width,height);
-
YanMo3(gtmpPixel,width,height);
-
YanMo3(btmpPixel,width,height);
-
}*/
-
for(i=
1;i<width
-1;i++)
-
{
-
for(j=
1;j<height
-1;j++)
-
{
-
k=i*height+j;
-
tmpPixel[k]=qRgb(rtmpPixel[k],gtmpPixel[k],btmpPixel[k]);
-
}
-
}
-
}
-
//邻域平均法平滑化函数
-
void MainWindow::YanMo1(
int *tmpPixel,
int width,
int height)
-
{
-
float Template[
9]={
1.0/
9,
1.0/
9,
1.0/
9,
1.0/
9,
1.0/
9,
1.0/
9,
1.0/
9,
1.0/
9,
1.0/
9};
-
int i,j;
-
for(i=
1;i<width
-1;i++)
-
{
-
for(j=
1;j<height
-1;j++)
-
{
-
tmpPixel[i*height+j]=tmpPixel[(i
-1)*height+j
-1]*Template[
0]+tmpPixel[(i
-1)*height+j]*Template[
1]+
-
tmpPixel[(i
-1)*height+j+
1]*Template[
2]+tmpPixel[i*height+j
-1]*Template[
3]+tmpPixel[i*height+j]*Template[
4]
-
+tmpPixel[i*height+j+
1]*Template[
5]+tmpPixel[(i+
1)*height+j
-1]*Template[
6]+tmpPixel[(i+
1)*height+j]*Template[
7]
-
+tmpPixel[(i+
1)*height+j+
1]*Template[
8];
-
}
-
}
-
}
-
//加权平均法平滑化函数
-
void MainWindow::YanMo2(
int *tmpPixel,
int width,
int height)
-
{
-
float Template[
9]={
1.0/
16,
2.0/
16,
1.0/
16,
2.0/
16,
4.0/
16,
2.0/
16,
1.0/
16,
2.0/
16,
1.0/
16};
-
int i,j;
-
for(i=
1;i<width
-1;i++)
-
{
-
for(j=
1;j<height
-1;j++)
-
{
-
tmpPixel[i*height+j]=tmpPixel[(i
-1)*height+j
-1]*Template[
0]+tmpPixel[(i
-1)*height+j]*Template[
1]+
-
tmpPixel[(i
-1)*height+j+
1]*Template[
2]+tmpPixel[i*height+j
-1]*Template[
3]+tmpPixel[i*height+j]*Template[
4]
-
+tmpPixel[i*height+j+
1]*Template[
5]+tmpPixel[(i+
1)*height+j
-1]*Template[
6]+tmpPixel[(i+
1)*height+j]*Template[
7]
-
+tmpPixel[(i+
1)*height+j+
1]*Template[
8];
-
}
-
}
-
}
扫描二维码关注公众号,回复:
9642491 查看本文章