Advertisement
sildren12

Labki TM2

Mar 13th, 2017
19
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 2.53 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.         medianBlur(rotatedPeppers, rotatedPeppers, 3);
  38.         // Wyświetlanie obrazu
  39.         imshow("Obracanie obrazu", rotatedPeppers);
  40.     }
  41.  
  42.     // Niszczenie okna
  43.     cvDestroyWindow("Obracanie obrazu");
  44.     return 0;
  45. }
  46. int v=1;
  47. bool dir=1;
  48. int angle=0;
  49. bool Rotate(Mat_<uchar> &peppersPixels, Mat_<uchar> &rotatedPeppersPixels)
  50. {
  51.     /* Funkcja obracająca obraz peppersPixels o liczbę stopni zwiększaną o 1 przy każdym kolejnym wywołaniu.
  52.     Kiedy liczba stopni dochodzi do 360, następuje powtórzenie cyklu - ustawienie liczbę stopni na 0.
  53.     Wynikowy obraz (obrócony) zostaje zapisywany w rotatedPeppersPixels. */
  54.    
  55.     if(dir)angle+=v;
  56.     if(!dir)angle-=v;
  57.    
  58.     float radian=((angle*M_PI)/180.0f);
  59.     // TODO
  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(radian)*(i-peppersPixels.rows/2)-sin(radian)*(j-peppersPixels.cols/2);
  65.         int y = sin(radian)*(i-peppersPixels.rows/2)+cos(radian)*(j-peppersPixels.cols/2);
  66.  
  67.         x=x+(peppersPixels.rows/2);
  68.         y=y+(peppersPixels.cols/2);
  69.  
  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.    
  81.  
  82.     // Oczekiwanie na wciśnięcie klawisza Esc lub Enter
  83.     char key = cvWaitKey(1);
  84.        
  85.     if(key == 27 || key == 13/*Esc lub Enter*/)
  86.         return true;
  87.  
  88.     if(key=='+')v++;
  89.     if(key=='-')v--; if(v<0) v=0;
  90.     if(key=='k')dir=!dir;
  91.     return false;
  92. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement