Advertisement
Guest User

Untitled

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