Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include "stdafx.h"
- #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 alfa=1;
- int kierunek = 0;
- int speed = 1;
- 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;
- medianBlur(rotatedPeppers, rotatedPeppers, 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
- rotatedPeppersPixels = 0;
- //peppersPixels -= peppersPixels.rows.length;
- double kat = alfa*M_PI/180;
- int iks, igrek;
- for (int x = 0; x < peppersPixels.rows; x++) {
- for (int y = 0; y < peppersPixels.cols; y++) {
- iks = (x - peppersPixels.cols/2)*sin(kat) - (y - peppersPixels.rows/2)*cos(kat) + peppersPixels.rows/2 + 0.5;
- igrek = (x - peppersPixels.rows/2)*cos(kat) + (y - peppersPixels.cols/2)*sin(kat) + peppersPixels.cols/2 + 0.5;
- if (iks < peppersPixels.rows && igrek < peppersPixels.cols && iks >= 0 && igrek >=0)
- rotatedPeppersPixels[iks][igrek] = peppersPixels[x][y];
- }
- }
- //peppersPixels.rows += peppersPixels.rows/2;
- //peppersPixels.cols += peppersPixels.cols/2;
- if(kierunek == 0)
- alfa = alfa + speed;
- else if (kierunek == 1)
- alfa = alfa - speed;
- //alfa++;
- if (alfa > 359)
- alfa = 0;
- else if (alfa < -359)
- alfa = 0;
- // Oczekiwanie na wciśnięcie klawisza Esc lub Enter
- char key = cvWaitKey(1);
- if(key == 27 || key == 13/*Esc lub Enter*/)
- return true;
- if(key == 32)
- {
- if(kierunek == 0)
- kierunek = 1;
- else
- kierunek = 0;
- }
- else if(key == 97)
- {
- speed++;
- if(speed>5)
- speed=1;
- }
- return false;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement