Advertisement
Eeedi

Techniki multimedialne lab2

Mar 13th, 2017
75
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.50 KB | None | 0 0
  1. #include "stdafx.h"
  2.  
  3. #define _USE_MATH_DEFINES
  4.  
  5. #include <opencv2/imgproc/imgproc.hpp> // Gaussian Blur
  6. #include <opencv2/core/core.hpp> // Basic OpenCV structures (cv::Mat, Scalar)
  7. #include <opencv2/highgui/highgui.hpp>
  8. #include <stdio.h>
  9. #include <math.h>
  10. #include <iostream>
  11.  
  12. using namespace std;
  13. using namespace cv;
  14. int angle=0,a=1;
  15. bool kierunek=1;
  16. bool Rotate(Mat_<uchar> &peppersPixels, Mat_<uchar> &rotatedPeppersPixels);
  17.  
  18. int _tmain(int argc, _TCHAR* argv[])
  19. {
  20. // Stworzenie okna w którym przechwycone obrazy będą wyświetlane
  21. cvNamedWindow("Obracanie obrazu", CV_WINDOW_AUTOSIZE);
  22.  
  23. // Pobranie obrazu
  24. Mat imagePeppers = imread("peppers.jpg",CV_LOAD_IMAGE_GRAYSCALE);
  25.  
  26. // Utworzenie obiektu przechowującego obraz, który będzie obracany
  27. Mat rotatedPeppers = imagePeppers.clone();
  28.  
  29. // Uzyskanie macierzy pikseli na podstawie obiektów Mat
  30. Mat_<uchar> peppersPixels = imagePeppers;
  31. Mat_<uchar> rotatedPeppersPixels = rotatedPeppers;
  32.  
  33. while(1)
  34. {
  35. // Obracanie obrazu
  36. if(Rotate(peppersPixels, rotatedPeppersPixels) == true)
  37. break;
  38.  
  39. medianBlur(rotatedPeppers,rotatedPeppers,5);
  40. // Wyświetlanie obrazu
  41. imshow("Obracanie obrazu", rotatedPeppers);
  42.  
  43. }
  44.  
  45. // Niszczenie okna
  46. cvDestroyWindow("Obracanie obrazu");
  47. return 0;
  48. }
  49.  
  50. bool Rotate(Mat_<uchar> &peppersPixels, Mat_<uchar> &rotatedPeppersPixels)
  51. {
  52. /* Funkcja obracająca obraz peppersPixels o liczbę stopni zwiększaną o 1 przy każdym kolejnym wywołaniu.
  53. Kiedy liczba stopni dochodzi do 360, następuje powtórzenie cyklu - ustawienie liczbę stopni na 0.
  54. Wynikowy obraz (obrócony) zostaje zapisywany w rotatedPeppersPixels. */
  55. if(kierunek) angle+=a;
  56. if(!kierunek) angle-=a;
  57.  
  58. float kat=(angle*M_PI)/180.0f;
  59.  
  60. rotatedPeppersPixels.setTo(0);
  61. for(int i=0;i<peppersPixels.rows;i++)
  62. for(int j=0;j<peppersPixels.cols;j++)
  63. {
  64. int x=cos(kat)*(i-peppersPixels.rows/2)-sin(kat)*(j-peppersPixels.cols/2);
  65. int y=sin(kat)*(i-peppersPixels.rows/2)+cos(kat)*(j-peppersPixels.cols/2);
  66.  
  67.  
  68. x+=peppersPixels.cols/2;
  69. y+=peppersPixels.rows/2;
  70.  
  71. if (x<0||x>=peppersPixels.rows)continue;
  72. if(y<0||y>=peppersPixels.cols)continue;
  73.  
  74. rotatedPeppersPixels[x][y]=peppersPixels[i][j];
  75. }
  76.  
  77.  
  78.  
  79. if (angle==360) angle=0;
  80. // Oczekiwanie na wciśnięcie klawisza Esc lub Enter
  81. char key = cvWaitKey(1);
  82. if(key == 27 || key == 13/*Esc lub Enter*/)
  83. return true;
  84.  
  85. if(key=='+')a++;
  86. if (key=='-')a--;
  87. if(key=='q')kierunek=1;
  88. if(key=='w')kierunek=0;
  89.  
  90. return false;
  91. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement