Advertisement
pabloducato

CWICZENIE_NR_2_OBRACANIE_OBRAZU

Jun 8th, 2019
328
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 3.71 KB | None | 0 0
  1. #include "stdafx.h" //CWICZENIE NR 2 OBRACANIE OBRAZU
  2. #define _USE_MATH_DEFINES
  3. #include <opencv2/imgproc/imgproc.hpp>  // Gaussian Blur
  4. #include <opencv2/core/core.hpp>        // Basic OpenCV structures (cv::Mat, Scalar)
  5. #include <opencv2/highgui/highgui.hpp>
  6. #include <stdio.h>
  7. #include <math.h>
  8. #include <iostream>
  9.  
  10. using namespace std;
  11. using namespace cv;
  12. int Speed = 1; //tempo obrotu
  13. int RotateDirection = 0; //kierunek obrotu
  14. double Degrees = 0; //stopnie
  15. bool Rotate(Mat_<uchar> &peppersPixels, Mat_<uchar> &rotatedPeppersPixels);
  16. int _tmain(int argc, _TCHAR* argv[])
  17. {
  18.     // Stworzenie okna w którym przechwycone obrazy będą wyświetlane
  19.     cvNamedWindow("Obracanie obrazu", CV_WINDOW_AUTOSIZE);
  20.     // Pobranie obrazu
  21.     Mat imagePeppers = imread("peppers.jpg",CV_LOAD_IMAGE_GRAYSCALE);
  22.     // Utworzenie obiektu przechowującego obraz, który będzie obracany
  23.     Mat rotatedPeppers = imagePeppers.clone();
  24.     // Uzyskanie macierzy pikseli na podstawie obiektów Mat
  25.     Mat_<uchar> peppersPixels = imagePeppers;
  26.     Mat_<uchar> rotatedPeppersPixels = rotatedPeppers;
  27.     while(1)
  28.     {
  29.         // Obracanie obrazu
  30.         if(Rotate(peppersPixels, rotatedPeppersPixels) == true)
  31.             break;
  32.         // usuniecie dziur z obrazu – filtr medianowy
  33.         medianBlur(rotatedPeppersPixels, rotatedPeppersPixels, 3);
  34.         // Wyświetlanie obrazu
  35.         imshow("Obracanie obrazu", rotatedPeppers);
  36.     }
  37.  
  38.     // Niszczenie okna
  39.     cvDestroyWindow("Obracanie obrazu");
  40.     return 0;
  41. }
  42.  
  43. bool Rotate(Mat_<uchar> &peppersPixels, Mat_<uchar> &rotatedPeppersPixels)
  44. {
  45. /* Funkcja obracająca obraz peppersPixels o liczbę stopni zwiększaną o 1 przy każdym kolejnym wywołaniu.
  46. Kiedy liczba stopni dochodzi do 360, następuje powtórzenie cyklu - ustawienie liczbę stopni na 0.
  47. Wynikowy obraz (obrócony) zostaje zapisywany w rotatedPeppersPixels. */
  48. // TODO
  49. //wyznaczenie nowych wspolrzednych dla pikseli
  50. double radians = Degrees * M_PI/180;
  51. //obrot obrazka wzgledem srodka ukladu wspolrzednych
  52. for(int i = 0; i< peppersPixels.rows;i++)
  53. {
  54.     for(int j=0;j<peppersPixels.cols;j++) rotatedPeppersPixels[i][j] = 0;
  55. }
  56. for(int i = 0; i< peppersPixels.rows;i++)
  57. {      
  58.     for(int j=0;j<peppersPixels.cols;j++)
  59.     {
  60.         int X_coordinate, Y_coordinate; //współrzędne punktów obróconych (liczby całkowite)
  61.         X_coordinate = (i - peppersPixels.cols/2) * sin(radians) + (j - peppersPixels.rows/2) * cos(radians) + peppersPixels.rows/2 + 0.5;
  62.         Y_coordinate = (i - peppersPixels.rows/2) * cos(radians) - (j - peppersPixels.cols/2) * sin(radians) + peppersPixels.cols/2 + 0.5;
  63.         if(X_coordinate>= 0 && Y_coordinate>=0 && X_coordinate <peppersPixels.rows && Y_coordinate <peppersPixels.cols)
  64.         {
  65.             rotatedPeppersPixels[X_coordinate][Y_coordinate] = peppersPixels[i][j];
  66.         }
  67.        
  68.     }
  69. }
  70. //kierunek obracania obrazu
  71. if  RotateDirection == 0) //obrót w kieruku prawym
  72. {
  73.     Degrees = Degrees + Speed;
  74. }
  75. else if  RotateDirection == 1) //obrót w kierunku lewym
  76. {
  77.     Degrees = Degrees - Speed;
  78. }
  79. if (Degrees > 359) //zabezpieczenie przed przekroczeniem zakresu
  80. {
  81.     Degrees = 0;
  82. }
  83. else if (Degrees < -359) //zabezpieczenie przed przekroczeniem zakresu
  84. {
  85.     Degrees = 0;
  86. }
  87. char key = cvWaitKey(1); //oczekiwanie na wcisniecie klawisza
  88. if (key == 27)  //wcisniecie klawisza ESC
  89. {
  90. return true;
  91. }
  92. if (key)
  93.     {
  94.     if (key == 13) //wcisniecie klawisza ENTER
  95.     {
  96.         if  RotateDirection == 0)
  97.         {
  98.             RotateDirection = 1;
  99.         }
  100.         else RotateDirection = 0;
  101.     }
  102.     else if (key == 32)
  103.     {
  104.         Speed++;
  105.             if (Speed > 5)
  106.             {
  107.                 Speed = 1;
  108.             }
  109.     }
  110.     }
  111. return false;
  112. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement