Advertisement
Eeedi

Techniki multimedialne lab3

Apr 3rd, 2017
67
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 3.85 KB | None | 0 0
  1. #include "stdafx.h"
  2.  
  3. #include <opencv2/imgproc/imgproc.hpp>  // Gaussian Blur
  4. #include <opencv2/core/core.hpp>        // Basic OpenCV structures (cv::Mat, Scalar)
  5. #include <opencv2/highgui/highgui.hpp>
  6. #include <stdio.h>
  7. #include <math.h>
  8. #include <iostream>
  9.  
  10. using namespace std;
  11. using namespace cv;
  12.  
  13. void detectEdges(Mat_<uchar> &peppersPixels, Mat_<uchar> &handEdgesMergedPixels, int centerX, int centerY);
  14.  
  15. int _tmain(int argc, _TCHAR* argv[])
  16. {
  17.     // Stworzenie okna w którym przechwycone obrazy będą wyświetlane
  18.     cvNamedWindow("Wykrywanie krawędzi", CV_WINDOW_AUTOSIZE);
  19.    
  20.     // Pobranie obrazu
  21.     Mat imagePeppers = imread("hand.jpg",CV_LOAD_IMAGE_GRAYSCALE);
  22.  
  23.     // Utworzenie obiektu przechowującego obraz z wyznaczonymi krawędziami
  24.     Mat handEdgesMerged = imagePeppers.clone();
  25.  
  26.     // Uzyskanie macierzy pikseli na podstawie obiektów Mat
  27.     Mat_<uchar> handPixels = imagePeppers;
  28.     Mat_<uchar> handEdgesMergedPixels = handEdgesMerged;
  29.  
  30.     // Wyznaczenie wpółrzędnych środa obrazu
  31.     int centerX = handPixels.cols/2;
  32.     int centerY = handPixels.rows/2;
  33.  
  34.     // Obracanie obrazu
  35.     detectEdges(handPixels, handEdgesMergedPixels, centerX, centerY);
  36.  
  37.     // Wyświetlanie obrazu
  38.     imshow("Wykrywanie krawędzi", handEdgesMerged);
  39.  
  40.     // Oczekiwanie na wciśnięcie klawisza Esc lub Enter
  41.     char key;
  42.     do  key = cvWaitKey(1);
  43.     while(key != 27 && key != 13);
  44.  
  45.     // Niszczenie okna
  46.     cvDestroyWindow("Wykrywanie krawędzi");
  47.     return 0;
  48. }
  49.  
  50. void detectEdges(Mat_<uchar> &handPixels, Mat_<uchar> &handEdgesMergedPixels, int centerX, int centerY)
  51. {
  52.     /* Funkcja wyznaczająca krawędzie za pomocą maski morfologicznej podanej przez prowadzącego.
  53.     Wyznaczane są najpierw krawędzie pionowe, później poziome. Następnie wykonywane jest scalenie
  54.     krawędzi pionowych i poziomych, przeskalowanie obrazu scalonego do zakresu 0-255 oraz binaryzacja
  55.     z eksperymentalnie dobranym progiem.
  56.     Wynikowy obraz zostaje zapisany w handEdgesMergedPixels.*/
  57.    
  58.     // Utworzenie obiektów przechowujących obrazy z wyznaczonymi krawędziami: pionowymi i poziomymi
  59.     Mat handEdgesVertical = handPixels.clone();
  60.     Mat handEdgesHorizontal = handPixels.clone();
  61.  
  62.     // Uzyskanie macierzy pikseli na podstawie obiektów Mat
  63.     Mat_<int> handEdgesVerticalPixels = handEdgesVertical;
  64.     Mat_<int> handEdgesHorizontalPixels = handEdgesHorizontal;
  65.  
  66.     // TODO
  67.  
  68.     //poziome
  69.     int piX, maxX=0, minX=0;
  70.     for(int i=1; i<handPixels.rows-1;i++)
  71.     {
  72.         for(int j=1; j<handPixels.cols-1;j++)
  73.         {
  74.             piX=abs((handPixels[i-1][j-1]*1)+(handPixels[i-1][j]*1)+(handPixels[i-1][j+1]*1)+
  75.                 (handPixels[i][j-1]*0)+(handPixels[i][j]*0)+(handPixels[i][j+1]*0)+
  76.                 (handPixels[i+1][j-1]*(-1))+(handPixels[i+1][j]*(-1))+(handPixels[i+1][j+1]*(-1)));
  77.  
  78.             handEdgesHorizontalPixels[i][j]=piX;
  79.             if(piX>maxX) maxX=piX;
  80.             if(piX<minX) minX=piX;
  81.         }
  82.        
  83.     }
  84.  
  85.  
  86.     //pionowe
  87.     int piY;
  88.     for(int i=1; i<handPixels.rows-1;i++)
  89.     {
  90.         for(int j=1; j<handPixels.cols-1;j++)
  91.         {
  92.             piY=abs((handPixels[i-1][j-1]*(-1))+(handPixels[i-1][j]*0)+(handPixels[i-1][j+1]*1)+
  93.                 (handPixels[i][j-1]*(-1))+(handPixels[i][j]*0)+(handPixels[i][j+1]*1)+
  94.                 (handPixels[i+1][j-1]*(-1))+(handPixels[i+1][j]*0)+(handPixels[i+1][j+1]*1));
  95.  
  96.             handEdgesVerticalPixels[i][j]=piY;
  97.             if(piY>maxX) maxX=piY;
  98.             if(piY<minX) minX=piY;
  99.         }
  100.        
  101.     }
  102.  
  103.     /*for (int i=0; i<handEdgesHorizontalPixels.rows;i++)
  104.     {
  105.         for (int j=0; j<handEdgesHorizontalPixels.cols;j++)
  106.         {
  107.             handEdgesHorizontalPixels[i][j]=(handEdgesHorizontalPixels[i][j]-minX)*(255-0)/(maxX-minX);
  108.         }
  109.     }*/
  110.  
  111.     for(int i=0; i<handPixels.rows;i++)
  112.     {
  113.         for(int j=0; j<handPixels.cols;j++)
  114.         {
  115.             handEdgesMergedPixels[i][j]=handEdgesHorizontalPixels[i][j]+handEdgesVerticalPixels[i][j];
  116.         }
  117.     }
  118.    
  119.     for(int i=0; i<handPixels.rows;i++)
  120.     {
  121.         for(int j=0; j<handPixels.cols;j++)
  122.         {
  123.             handEdgesMergedPixels[i][j]=(handEdgesMergedPixels[i][j]-minX)*(255-0)/(maxX-minX);
  124.         }
  125.     }
  126. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement