Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include "stdafx.h" //CWICZENIE NR 2 OBRACANIE OBRAZU
- #define _USE_MATH_DEFINES
- #include <opencv2/imgproc/imgproc.hpp> // Gaussian Blur
- #include <opencv2/core/core.hpp> // Basic OpenCV structures (cv::Mat, Scalar)
- #include <opencv2/highgui/highgui.hpp>
- #include <stdio.h>
- #include <math.h>
- #include <iostream>
- using namespace std;
- using namespace cv;
- int Speed = 1; //tempo obrotu
- int RotateDirection = 0; //kierunek obrotu
- double Degrees = 0; //stopnie
- bool Rotate(Mat_<uchar> &peppersPixels, Mat_<uchar> &rotatedPeppersPixels);
- int _tmain(int argc, _TCHAR* argv[])
- {
- // Stworzenie okna w którym przechwycone obrazy będą wyświetlane
- cvNamedWindow("Obracanie obrazu", CV_WINDOW_AUTOSIZE);
- // Pobranie obrazu
- Mat imagePeppers = imread("peppers.jpg",CV_LOAD_IMAGE_GRAYSCALE);
- // Utworzenie obiektu przechowującego obraz, który będzie obracany
- Mat rotatedPeppers = imagePeppers.clone();
- // Uzyskanie macierzy pikseli na podstawie obiektów Mat
- Mat_<uchar> peppersPixels = imagePeppers;
- Mat_<uchar> rotatedPeppersPixels = rotatedPeppers;
- while(1)
- {
- // Obracanie obrazu
- if(Rotate(peppersPixels, rotatedPeppersPixels) == true)
- break;
- // usuniecie dziur z obrazu – filtr medianowy
- medianBlur(rotatedPeppersPixels, rotatedPeppersPixels, 3);
- // Wyświetlanie obrazu
- imshow("Obracanie obrazu", rotatedPeppers);
- }
- // Niszczenie okna
- cvDestroyWindow("Obracanie obrazu");
- return 0;
- }
- bool Rotate(Mat_<uchar> &peppersPixels, Mat_<uchar> &rotatedPeppersPixels)
- {
- /* Funkcja obracająca obraz peppersPixels o liczbę stopni zwiększaną o 1 przy każdym kolejnym wywołaniu.
- Kiedy liczba stopni dochodzi do 360, następuje powtórzenie cyklu - ustawienie liczbę stopni na 0.
- Wynikowy obraz (obrócony) zostaje zapisywany w rotatedPeppersPixels. */
- // TODO
- //wyznaczenie nowych wspolrzednych dla pikseli
- double radians = Degrees * M_PI/180;
- //obrot obrazka wzgledem srodka ukladu wspolrzednych
- for(int i = 0; i< peppersPixels.rows;i++)
- {
- for(int j=0;j<peppersPixels.cols;j++) rotatedPeppersPixels[i][j] = 0;
- }
- for(int i = 0; i< peppersPixels.rows;i++)
- {
- for(int j=0;j<peppersPixels.cols;j++)
- {
- int X_coordinate, Y_coordinate; //współrzędne punktów obróconych (liczby całkowite)
- X_coordinate = (i - peppersPixels.cols/2) * sin(radians) + (j - peppersPixels.rows/2) * cos(radians) + peppersPixels.rows/2 + 0.5;
- Y_coordinate = (i - peppersPixels.rows/2) * cos(radians) - (j - peppersPixels.cols/2) * sin(radians) + peppersPixels.cols/2 + 0.5;
- if(X_coordinate>= 0 && Y_coordinate>=0 && X_coordinate <peppersPixels.rows && Y_coordinate <peppersPixels.cols)
- {
- rotatedPeppersPixels[X_coordinate][Y_coordinate] = peppersPixels[i][j];
- }
- }
- }
- //kierunek obracania obrazu
- if RotateDirection == 0) //obrót w kieruku prawym
- {
- Degrees = Degrees + Speed;
- }
- else if RotateDirection == 1) //obrót w kierunku lewym
- {
- Degrees = Degrees - Speed;
- }
- if (Degrees > 359) //zabezpieczenie przed przekroczeniem zakresu
- {
- Degrees = 0;
- }
- else if (Degrees < -359) //zabezpieczenie przed przekroczeniem zakresu
- {
- Degrees = 0;
- }
- char key = cvWaitKey(1); //oczekiwanie na wcisniecie klawisza
- if (key == 27) //wcisniecie klawisza ESC
- {
- return true;
- }
- if (key)
- {
- if (key == 13) //wcisniecie klawisza ENTER
- {
- if RotateDirection == 0)
- {
- RotateDirection = 1;
- }
- else RotateDirection = 0;
- }
- else if (key == 32)
- {
- Speed++;
- if (Speed > 5)
- {
- Speed = 1;
- }
- }
- }
- return false;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement