Advertisement
elektryk798

multimedialne_2

Apr 1st, 2019
426
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.90 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.  
  15. int alfa=1;
  16. int kierunek = 0;
  17. int speed = 1;
  18. bool Rotate(Mat_<uchar> &peppersPixels, Mat_<uchar> &rotatedPeppersPixels);
  19.  
  20. int _tmain(int argc, _TCHAR* argv[])
  21. {
  22. // Stworzenie okna w którym przechwycone obrazy będą wyświetlane
  23. cvNamedWindow("Obracanie obrazu", CV_WINDOW_AUTOSIZE);
  24.  
  25. // Pobranie obrazu
  26. Mat imagePeppers = imread("peppers.jpg",CV_LOAD_IMAGE_GRAYSCALE);
  27.  
  28. // Utworzenie obiektu przechowującego obraz, który będzie obracany
  29. Mat rotatedPeppers = imagePeppers.clone();
  30.  
  31. // Uzyskanie macierzy pikseli na podstawie obiektów Mat
  32. Mat_<uchar> peppersPixels = imagePeppers;
  33. Mat_<uchar> rotatedPeppersPixels = rotatedPeppers;
  34.  
  35. while(1)
  36. {
  37. // Obracanie obrazu
  38. if(Rotate(peppersPixels, rotatedPeppersPixels) == true)
  39. break;
  40.  
  41. medianBlur(rotatedPeppers, rotatedPeppers, 3);
  42.  
  43. // Wyświetlanie obrazu
  44. imshow("Obracanie obrazu", rotatedPeppers);
  45. }
  46.  
  47. // Niszczenie okna
  48. cvDestroyWindow("Obracanie obrazu");
  49. return 0;
  50. }
  51.  
  52. bool Rotate(Mat_<uchar> &peppersPixels, Mat_<uchar> &rotatedPeppersPixels)
  53. {
  54. /* Funkcja obracająca obraz peppersPixels o liczbę stopni zwiększaną o 1 przy każdym kolejnym wywołaniu.
  55. Kiedy liczba stopni dochodzi do 360, następuje powtórzenie cyklu - ustawienie liczbę stopni na 0.
  56. Wynikowy obraz (obrócony) zostaje zapisywany w rotatedPeppersPixels. */
  57. // TODO
  58. rotatedPeppersPixels = 0;
  59.  
  60. //peppersPixels -= peppersPixels.rows.length;
  61. double kat = alfa*M_PI/180;
  62. int iks, igrek;
  63. for (int x = 0; x < peppersPixels.rows; x++) {
  64. for (int y = 0; y < peppersPixels.cols; y++) {
  65. iks = (x - peppersPixels.cols/2)*sin(kat) - (y - peppersPixels.rows/2)*cos(kat) + peppersPixels.rows/2 + 0.5;
  66. igrek = (x - peppersPixels.rows/2)*cos(kat) + (y - peppersPixels.cols/2)*sin(kat) + peppersPixels.cols/2 + 0.5;
  67. if (iks < peppersPixels.rows && igrek < peppersPixels.cols && iks >= 0 && igrek >=0)
  68. rotatedPeppersPixels[iks][igrek] = peppersPixels[x][y];
  69. }
  70. }
  71. //peppersPixels.rows += peppersPixels.rows/2;
  72. //peppersPixels.cols += peppersPixels.cols/2;
  73. if(kierunek == 0)
  74. alfa = alfa + speed;
  75. else if (kierunek == 1)
  76. alfa = alfa - speed;
  77. //alfa++;
  78. if (alfa > 359)
  79. alfa = 0;
  80. else if (alfa < -359)
  81. alfa = 0;
  82.  
  83. // Oczekiwanie na wciśnięcie klawisza Esc lub Enter
  84. char key = cvWaitKey(1);
  85. if(key == 27 || key == 13/*Esc lub Enter*/)
  86. return true;
  87. if(key == 32)
  88. {
  89. if(kierunek == 0)
  90. kierunek = 1;
  91. else
  92. kierunek = 0;
  93. }
  94. else if(key == 97)
  95. {
  96. speed++;
  97. if(speed>5)
  98. speed=1;
  99. }
  100.  
  101. return false;
  102. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement