Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <QApplication>
- #include "ImageGrid.h"
- #include "operatii.h"
- #include "opencv2\core.hpp"
- #include "opencv2\imgproc.hpp"
- #include "opencv2\highgui.hpp"
- using namespace std;
- using namespace cv;
- /* Shortcuts:
- Scroll wheel - zoom in/out
- Middle button drag - deplasare in imagine cand aceasta este mai mare decat fereastra
- Ctrl+A - activeaza / dezactiveaza ajustarea automata a dimensiunii imaginii
- pe care se afla cursorul mouse-ului
- Shift+A - activeaza / dezactiveaza ajustarea automata a dimensiunii
- tuturor imaginilor
- Ctrl+R - reseteaza imaginea curenta la dimensiunile sale initiale
- Shift+R - reseteaza toate imaginile la dimensiunile lor initiale
- */
- int main(int argc, char *argv[])
- {
- QApplication a(argc, argv);
- /* generam o fereastra care va contine una sau mai multe imagini
- plasate sub forma unei matrici 2D */
- ImageGrid *grid = new ImageGrid("Prelucrarea imaginilor");
- QString imageDir = "Images/";
- QString imageFile = imageDir + "football.jpg";
- /*adaugam prima imagine, cea initiala, citita din fisier,
- in pozitia stanga-sus (linia 0, coloana 0)*/
- grid->addImage(imageFile, 0, 0, "imag. initiala");
- /* extragem imformatiile necesare din imagine:
- dimensiunile ei si un sir de octeti care contine valorile
- intensitatilor pentru fiecare pixel */
- int w, h;
- unsigned char* img = Tools::readImageGray8(imageFile, w, h);
- // exemplu de operatie: negativarea unei imagini
- /*parcurgem imaginea pixel cu pixel si determinam valoarea complementara
- pentru fiecare intensitate
- se recomanda ca acest gen de operatie sa se implementeze intr-o functie
- separata sau intr-o alta clasa
- */
- unsigned char* negated = negateImage(img, w, h);
- /* afisam imaginea astfel obtinuta la dreapta celei initiale;
- parametrii cu valorile 0, 1 semnifica prima linie, respectiv
- a doua coloana a imageGrid-ului
- */
- grid->addImage(negated, w, h, 0, 1, "negativ");
- /* *** HISTOGRAMA ***
- pentru afisarea histogramelor se poate folosi metoda:
- void ImageGrid::addHistogram(int *values, int nrValues, int posX, int posY, QString title)
- unde:
- values - vector cu valorile histogramei (nr pixeli pentru fiecare valoare a intensitatii)
- nrValues - numarul de elemente ale histogramei (de exemplu poate fi numarul de nivele de intensitate, 256 pt imagini grayscale pe 8 biti)
- posX, posY, title - aceleasi roluri ca si in cazul adaugarii imaginilor
- exemplu de utilizare:
- int nrVals = 256;
- int *hist = ...
- grid->addHistogram(hist, nrVals, 0, 1, "my histogram");
- */
- Mat src(h,w,CV_8UC1, img);
- Mat planes[] = { Mat_<float>(src),Mat::zeros(src.size(),CV_32F) };
- Mat matrice;
- merge(planes, 2, matrice);
- dft(matrice, matrice);
- split(matrice, planes);
- magnitude(planes[0], planes[1], planes[0]);
- Mat magI = planes[0];
- magI += Scalar::all(1);
- log(magI, magI);
- magI=magI( Rect(0, 0, magI.cols & -2, magI.rows & -2)); // Top‐Left ‐ Create a ROI perquadrant
- int cx = magI.cols / 2;
- int cy = magI.rows / 2;
- Mat q0(magI, Rect(0, 0, cx, cy));
- Mat q1(magI, Rect(cx, 0, cx, cy)); // Top‐Right
- Mat q2(magI, Rect(0, cy, cx, cy)); // Bottom‐Left
- Mat q3(magI, Rect(cx, cy, cx, cy)); // Bottom‐Right
- Mat tmp; // swap quadrants (Top‐Left withBottom‐Right)
- q0.copyTo(tmp);
- q3.copyTo(q0);
- tmp.copyTo(q3);
- q1.copyTo(tmp); // swap quadrant (Top‐Right withBottom‐Left)
- q2.copyTo(q1);
- tmp.copyTo(q2);
- normalize(magI, magI, 0, 1, CV_MINMAX);
- imshow("spectrum magnitude", magI);
- grid->show();
- //Mat planes[] = { Mat_<float>(src),Mat::zeros(src.size(),CV_32F) };
- return a.exec();
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement