Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include "stdafx.h" //CWICZENIE NR 1 PRZENIKANIE SIE DWOCH OBRAZOW
- #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;
- float step = 0.02f; //krok typu float
- bool Diffuse(Mat_<Vec3b> &peppersPixels, Mat_<Vec3b> &fruitsPixels, Mat_<Vec3b> &imagesDiffusionPixels, float ratio);
- int _tmain(int argc, _TCHAR* argv[])
- {
- // Stworzenie okna w którym przechwycone obrazy bêd¹ wyœwietlane
- cvNamedWindow("Przenikanie sie obrazów", CV_WINDOW_AUTOSIZE);
- // Pobranie obrazu Zadanie 1
- Mat imagePeppers = imread("peppers.jpg",CV_LOAD_IMAGE_COLOR);
- Mat imageFruits = imread("fruits.jpg",CV_LOAD_IMAGE_COLOR);
- // Utworzenie obiektu przechowuj¹cego obraz, który bêdzie wynikiem przenikania
- Mat imagesDiffusion = imagePeppers.clone();
- // Uzyskanie macierzy pikseli na podstawie obiektów Mat
- Mat_<Vec3b> peppersPixels = imagePeppers;
- Mat_<Vec3b> fruitsPixels = imageFruits;
- Mat_<Vec3b> imagesDiffusionPixels = imagesDiffusion;
- do
- {
- float ratio = 1.0f; //wspołczynnik przenikania ratio typu typu float
- for(ratio; ratio > 0; ratio -= step)
- {
- // Przenikanie obrazów
- if(Diffuse(peppersPixels, fruitsPixels, imagesDiffusionPixels, ratio) == true)
- goto end;
- // Wyœwietlanie obrazu
- imshow("Przenikanie siê obrazów", imagesDiffusion);
- }
- /*TODO: tutaj stworzyæ drugc petle for zmianiajaca ratio*/
- for(ratio; ratio < 1; ratio += step)
- {
- // Przenikanie obrazów
- if(Diffuse(peppersPixels, fruitsPixels, imagesDiffusionPixels, ratio) == true)
- goto end;
- // Wyœwietlanie obrazu
- imshow("Przenikanie siê obrazów", imagesDiffusion);
- }
- }
- while(true);
- end:
- // Niszczenie okna
- cvDestroyWindow("Przenikanie siê obrazów");
- return 0;
- }
- bool Diffuse(Mat_<Vec3b> &peppersPixels, Mat_<Vec3b> &fruitsPixels, Mat_<Vec3b> &imagesDiffusionPixels, float ratio)
- {
- /* Funkcja przenikaj¹ca obrazy peppersPixels oraz fruitsPixels (maj¹ one ten sam rozmiar).
- Parametr ratio jest wpó³czynnikiem przenikania i powinien zmieniaæ wartoœæ w zakresie od 1 do 0 z krokiem 0.01.
- Obraz powinien przechodziæ w kolejnoœci od peppersPixels do fruitsPixels, nastêpnie od fruitsPixels
- do peppersPixels i od pocz¹tku.
- Wynikowy obraz zostaje zapisywany w imagesDiffusionPixels.
- 1 etap æwiczenia: Nale¿y przetwarzaæ obrazy szare - 1-kana³owe.
- 2 etap æwiczenia: Nale¿y przetwarzaæ obrazy 3-kana³owe (RGB) w 3 zagnie¿d¿onych pêtlach
- (ka¿dy wiersz, kolumna, kana³). Do wykonania tego etapu nale¿y wprowadziæ zmiany
- równie¿ poza funkcj¹ Diffuse.*/
- // TODO: przenikanie siê pikseli obrazu
- // Na koñcu funkcja powinna oczekiwaæ 1 milisekundê na wciœniêcie klawisza Esc lub Enter.
- // Jeœli u¿ytkownik wciœnie któryœ z wymienionych klawiszy, funkcja powinna zwróciæ wartoœæ true. Zadanie 2
- for(int i = 0; i<peppersPixels.rows; i++)
- {
- for(int j = 0; j<peppersPixels.cols; j++)
- {
- for(int k = 0; k<3; k++)
- {
- //wartości odpowiadających sobie pikseli obrazu pierwszego oraz drugiego przemnożone przez odpowiednio ratio i (1 - ratio)
- imagesDiffusionPixels[i][j][k] = peppersPixels[i][j][k] * ratio + fruitsPixels[i][j][k] * (1 - ratio);
- }
- }
- }
- // TODO: oczenikawnie przez 1 milisekunde na klawisz
- char c;
- c = cvWaitKey(1); //tymczasowe
- if (c==27 || c==13) return true;
- //Zadanie 3 Dynamiczna zmiana szybkości przenikania się obrazów - klawisze '+' i '-'
- //Dopuszczalny zakres wartości zmiennej ratio, to [0.001 – 0.1]
- else if (c==43 && step <= 0.1)
- {
- step += 0.02; //0.003;
- }
- else if (c==45 && step >= 0.001)
- {
- step -= 0.02; //0.003;
- }
- return false;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement