Advertisement
Guest User

Untitled

a guest
Nov 20th, 2017
103
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 3.57 KB | None | 0 0
  1. #include <QApplication>
  2. #include "ImageGrid.h"
  3. #include "operatii.h"
  4.  
  5. #include "opencv2\core.hpp"
  6. #include "opencv2\imgproc.hpp"
  7. #include "opencv2\highgui.hpp"
  8. using namespace std;
  9. using namespace cv;
  10. /* Shortcuts:
  11.  
  12. Scroll wheel - zoom in/out
  13.  
  14. Middle button drag - deplasare in imagine cand aceasta este mai mare decat fereastra
  15.  
  16. Ctrl+A - activeaza / dezactiveaza ajustarea automata a dimensiunii imaginii
  17. pe care se afla cursorul mouse-ului
  18.  
  19. Shift+A - activeaza / dezactiveaza ajustarea automata a dimensiunii
  20. tuturor imaginilor
  21.  
  22. Ctrl+R - reseteaza imaginea curenta la dimensiunile sale initiale
  23.  
  24. Shift+R - reseteaza toate imaginile la dimensiunile lor initiale
  25.  
  26. */
  27.  
  28. int main(int argc, char *argv[])
  29. {
  30. QApplication a(argc, argv);
  31.  
  32. /* generam o fereastra care va contine una sau mai multe imagini
  33. plasate sub forma unei matrici 2D */
  34. ImageGrid *grid = new ImageGrid("Prelucrarea imaginilor");
  35.  
  36. QString imageDir = "Images/";
  37. QString imageFile = imageDir + "football.jpg";
  38.  
  39. /*adaugam prima imagine, cea initiala, citita din fisier,
  40. in pozitia stanga-sus (linia 0, coloana 0)*/
  41. grid->addImage(imageFile, 0, 0, "imag. initiala");
  42.  
  43. /* extragem imformatiile necesare din imagine:
  44. dimensiunile ei si un sir de octeti care contine valorile
  45. intensitatilor pentru fiecare pixel */
  46. int w, h;
  47. unsigned char* img = Tools::readImageGray8(imageFile, w, h);
  48.  
  49.  
  50. // exemplu de operatie: negativarea unei imagini
  51.  
  52. /*parcurgem imaginea pixel cu pixel si determinam valoarea complementara
  53. pentru fiecare intensitate
  54.  
  55. se recomanda ca acest gen de operatie sa se implementeze intr-o functie
  56. separata sau intr-o alta clasa
  57. */
  58.  
  59. unsigned char* negated = negateImage(img, w, h);
  60.  
  61. /* afisam imaginea astfel obtinuta la dreapta celei initiale;
  62. parametrii cu valorile 0, 1 semnifica prima linie, respectiv
  63. a doua coloana a imageGrid-ului
  64. */
  65. grid->addImage(negated, w, h, 0, 1, "negativ");
  66.  
  67. /* *** HISTOGRAMA ***
  68.  
  69. pentru afisarea histogramelor se poate folosi metoda:
  70.  
  71. void ImageGrid::addHistogram(int *values, int nrValues, int posX, int posY, QString title)
  72.  
  73. unde:
  74.  
  75. values - vector cu valorile histogramei (nr pixeli pentru fiecare valoare a intensitatii)
  76. nrValues - numarul de elemente ale histogramei (de exemplu poate fi numarul de nivele de intensitate, 256 pt imagini grayscale pe 8 biti)
  77. posX, posY, title - aceleasi roluri ca si in cazul adaugarii imaginilor
  78.  
  79. exemplu de utilizare:
  80.  
  81. int nrVals = 256;
  82. int *hist = ...
  83.  
  84. grid->addHistogram(hist, nrVals, 0, 1, "my histogram");
  85.  
  86. */
  87.  
  88. Mat src(h,w,CV_8UC1, img);
  89. Mat planes[] = { Mat_<float>(src),Mat::zeros(src.size(),CV_32F) };
  90. Mat matrice;
  91. merge(planes, 2, matrice);
  92. dft(matrice, matrice);
  93. split(matrice, planes);
  94. magnitude(planes[0], planes[1], planes[0]);
  95. Mat magI = planes[0];
  96. magI += Scalar::all(1);
  97. log(magI, magI);
  98.  
  99. magI=magI( Rect(0, 0, magI.cols & -2, magI.rows & -2)); // Top‐Left ‐ Create a ROI perquadrant
  100. int cx = magI.cols / 2;
  101. int cy = magI.rows / 2;
  102.  
  103. Mat q0(magI, Rect(0, 0, cx, cy));
  104. Mat q1(magI, Rect(cx, 0, cx, cy)); // Top‐Right
  105. Mat q2(magI, Rect(0, cy, cx, cy)); // Bottom‐Left
  106. Mat q3(magI, Rect(cx, cy, cx, cy)); // Bottom‐Right
  107.  
  108. Mat tmp; // swap quadrants (Top‐Left withBottom‐Right)
  109. q0.copyTo(tmp);
  110. q3.copyTo(q0);
  111. tmp.copyTo(q3);
  112.  
  113. q1.copyTo(tmp); // swap quadrant (Top‐Right withBottom‐Left)
  114. q2.copyTo(q1);
  115. tmp.copyTo(q2);
  116.  
  117. normalize(magI, magI, 0, 1, CV_MINMAX);
  118. imshow("spectrum magnitude", magI);
  119.  
  120.  
  121. grid->show();
  122. //Mat planes[] = { Mat_<float>(src),Mat::zeros(src.size(),CV_32F) };
  123. return a.exec();
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement