[TASK] Implement Task#2 Sub 1.
This commit is contained in:
parent
d8aa33b45d
commit
1d09fcdcc7
|
@ -142,6 +142,78 @@ void ImageViewer::acidTrippin() {
|
|||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Analyze the image, get average luminance
|
||||
* Also fill grayscale_absolute_histogramm
|
||||
* @brief ImageViewer::analyzeImage
|
||||
*/
|
||||
void ImageViewer::analyzeImage() {
|
||||
if(image!=NULL) {
|
||||
//Zero existing histogramm data first
|
||||
for(int i=0; i<256; i++) {
|
||||
grayscale_absolute_histogramm[i] = 0;
|
||||
grayscale_relative_histogramm[i] = 0;
|
||||
}
|
||||
|
||||
logFile << "Analyzing image ...";
|
||||
renewLogging();
|
||||
for(int x=0; x<image->width(); x++) {
|
||||
for(int y=0; y<image->height(); y++) {
|
||||
logFile << "(" << x << "," << y << "): ";
|
||||
int r,g,b;
|
||||
QColor color = QColor::fromRgb(image->pixel(x, y));
|
||||
color.getRgb(&r,&g,&b);
|
||||
logFile << "(" << r << "," << g << "," << b << ")";
|
||||
int intensity = (int)(0.299*r+0.587*g+0.114*b);
|
||||
logFile << "(" << intensity << ")";
|
||||
grayscale_absolute_histogramm[intensity] += 1;
|
||||
logFile << std::endl;
|
||||
}
|
||||
}
|
||||
|
||||
int pixels = image->width()*image->height();
|
||||
for(int i=0; i<256; i++) {
|
||||
grayscale_relative_histogramm[i] = ((1.0*grayscale_absolute_histogramm[i])/(1.0*pixels));
|
||||
}
|
||||
|
||||
logFile << "done" << std::endl;
|
||||
logFile << "Average intensity: " << getAverageIntensity() << std::endl;
|
||||
logFile << "Intensity variance: " << getIntensityVariance() << std::endl;
|
||||
renewLogging();
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Use histogramm to retrieve the average intensity.
|
||||
* @brief ImageViewer::getAverageIntensity
|
||||
*/
|
||||
int ImageViewer::getAverageIntensity() {
|
||||
double sumIntensity = 0;
|
||||
for(int i=0; i<256;i++) {
|
||||
sumIntensity += (i*grayscale_relative_histogramm[i]);
|
||||
}
|
||||
return (int)sumIntensity;
|
||||
}
|
||||
|
||||
/**
|
||||
* Retrieve the intensity variance from the image.
|
||||
* @brief ImageViewer::getVarianceIntensity
|
||||
*/
|
||||
int ImageViewer::getIntensityVariance() {
|
||||
int average_intensity = getAverageIntensity();
|
||||
int sumDifference = 0;
|
||||
for(int x=0; x<image->width(); x++) {
|
||||
for(int y=0; y<image->height(); y++) {
|
||||
QColor color = QColor::fromRgb(image->pixel(x, y));
|
||||
int r,g,b;
|
||||
color.getRgb(&r,&g,&b);
|
||||
int intensity = (int)(0.299*r+0.587*g+0.114*b);
|
||||
int diff = std::abs(intensity - average_intensity);
|
||||
sumDifference += diff;
|
||||
}
|
||||
}
|
||||
return (int) (sumDifference/(image->width()*image->height()));
|
||||
}
|
||||
|
||||
/****************************************************************************************
|
||||
*
|
||||
|
@ -155,21 +227,21 @@ void ImageViewer::generateControlPanels() {
|
|||
task_tab1 = new QVBoxLayout();
|
||||
task_tab_widget1->setLayout(task_tab1);
|
||||
|
||||
button1 = new QPushButton();
|
||||
button1->setText("Draw a black line");
|
||||
QObject::connect(button1, SIGNAL(clicked()), this, SLOT (drawBlackLine()));
|
||||
task_tab1_button1 = new QPushButton();
|
||||
task_tab1_button1->setText("Draw a black line");
|
||||
QObject::connect(task_tab1_button1, SIGNAL(clicked()), this, SLOT (drawBlackLine()));
|
||||
|
||||
button2 = new QPushButton();
|
||||
button2->setText("Draw a rainbow cross");
|
||||
QObject::connect(button2, SIGNAL(clicked()), this, SLOT (drawRainbowCross()));
|
||||
task_tab1_button2 = new QPushButton();
|
||||
task_tab1_button2->setText("Draw a rainbow cross");
|
||||
QObject::connect(task_tab1_button2, SIGNAL(clicked()), this, SLOT (drawRainbowCross()));
|
||||
|
||||
button3 = new QPushButton();
|
||||
button3->setText("Start the neverending acid trip!");
|
||||
QObject::connect(button3, SIGNAL(clicked()), this, SLOT (acidTrippin()));
|
||||
task_tab1_button3 = new QPushButton();
|
||||
task_tab1_button3->setText("Start the neverending acid trip!");
|
||||
QObject::connect(task_tab1_button3, SIGNAL(clicked()), this, SLOT (acidTrippin()));
|
||||
|
||||
button4 = new QPushButton();
|
||||
button4->setText("Draw a diagonal cross");
|
||||
QObject::connect(button4, SIGNAL(clicked()), this, SLOT (drawDiagonalCross()));
|
||||
task_tab1_button4 = new QPushButton();
|
||||
task_tab1_button4->setText("Draw a diagonal cross");
|
||||
QObject::connect(task_tab1_button4, SIGNAL(clicked()), this, SLOT (drawDiagonalCross()));
|
||||
|
||||
lineSlider = new QSlider(Qt::Horizontal);
|
||||
lineSlider->setMinimum(1);
|
||||
|
@ -178,10 +250,10 @@ void ImageViewer::generateControlPanels() {
|
|||
//QObject::connect(lineSlider, SIGNAL(valueChanged(int)), this, SLOT (drawRainbowCross()));
|
||||
|
||||
task_tab1->addWidget(new QLabel("Let's draw something!"));
|
||||
task_tab1->addWidget(button1);
|
||||
task_tab1->addWidget(button2);
|
||||
task_tab1->addWidget(button3);
|
||||
task_tab1->addWidget(button4);
|
||||
task_tab1->addWidget(task_tab1_button1);
|
||||
task_tab1->addWidget(task_tab1_button2);
|
||||
task_tab1->addWidget(task_tab1_button3);
|
||||
task_tab1->addWidget(task_tab1_button4);
|
||||
task_tab1->addWidget(new QLabel("This will not stop unless process is killed."));
|
||||
task_tab1->addWidget(lineSlider);
|
||||
task_tab1->addWidget(new QLabel("Sets the width of the cross."));
|
||||
|
@ -190,17 +262,21 @@ void ImageViewer::generateControlPanels() {
|
|||
|
||||
|
||||
//Tab for second task
|
||||
task_tab2_button1 = new QPushButton();
|
||||
task_tab2_button1->setText("Analyze image");
|
||||
QObject::connect(task_tab2_button1, SIGNAL(clicked()), this, SLOT (analyzeImage()));
|
||||
|
||||
QLabel* task_tab2_stats = new QLabel();
|
||||
|
||||
task_tab_widget2 = new QWidget();
|
||||
task_tab2 = new QVBoxLayout();
|
||||
task_tab_widget2->setLayout(task_tab2);
|
||||
|
||||
spinbox1 = new QSpinBox(tabWidget);
|
||||
|
||||
task_tab2->addWidget(new QLabel("Here we put some more controls later."));
|
||||
task_tab2->addWidget(spinbox1);
|
||||
task_tab2->addWidget(task_tab2_button1);
|
||||
task_tab2->addWidget(task_tab2_stats);
|
||||
|
||||
tabWidget->addTab(task_tab_widget2,"Task #2");
|
||||
//tabWidget->show();
|
||||
tabWidget->show();
|
||||
|
||||
}
|
||||
|
||||
|
|
|
@ -70,10 +70,10 @@ class ImageViewer : public QMainWindow {
|
|||
QWidget* task_tab_widget1;
|
||||
QVBoxLayout* task_tab1;
|
||||
|
||||
QPushButton* button1;
|
||||
QPushButton* button2;
|
||||
QPushButton* button3;
|
||||
QPushButton* button4;
|
||||
QPushButton* task_tab1_button1;
|
||||
QPushButton* task_tab1_button2;
|
||||
QPushButton* task_tab1_button3;
|
||||
QPushButton* task_tab1_button4;
|
||||
|
||||
QSlider* lineSlider;
|
||||
|
||||
|
@ -81,7 +81,12 @@ class ImageViewer : public QMainWindow {
|
|||
QWidget* task_tab_widget2;
|
||||
QVBoxLayout* task_tab2;
|
||||
|
||||
QSpinBox* spinbox1;
|
||||
QPushButton* task_tab2_button1;
|
||||
QLabel* task_tab2_stats;
|
||||
|
||||
// "My" space for storing data/results
|
||||
int grayscale_absolute_histogramm[256];
|
||||
double grayscale_relative_histogramm[256];
|
||||
|
||||
|
||||
private slots:
|
||||
|
@ -90,7 +95,8 @@ class ImageViewer : public QMainWindow {
|
|||
void drawRainbowCross();
|
||||
void drawDiagonalCross();
|
||||
void acidTrippin();
|
||||
|
||||
void analyzeImage();
|
||||
|
||||
void open();
|
||||
void print();
|
||||
void zoomIn();
|
||||
|
@ -110,6 +116,8 @@ class ImageViewer : public QMainWindow {
|
|||
private:
|
||||
// Custom methods
|
||||
void drawRainbowCross(int h);
|
||||
int getAverageIntensity();
|
||||
int getIntensityVariance();
|
||||
|
||||
void generateControlPanels();
|
||||
void startLogging();
|
||||
|
|
Loading…
Reference in New Issue