Pierwszy program

Pierwszy program, jaki napiszemy będzie po prostu wyświetlał obraz. Będziemy używać obrazu Lena.jpg

Obraz można wyświetlić w następujący sposób:

#include <cstdlib>
#include <iostream>
#include <opencv2/highgui/highgui.hpp>
#include <opencv2/opencv.hpp>
using namespace cv;
using namespace std;
int main(){     
  Mat img = imread("./LENA_512.jpg",CV_LOAD_IMAGE_COLOR);
  imshow("opencvtest",img);
  waitKey(0); 
  return 0;
}

Możemy zmienić kolory pikseli. Zacznijmy od najprostszej sytuacji, czyli zdjęcia w odcieniach szarości. W taki przypadku, każdy piksel jest reprezentowany przez jedną wartość z zakresu $[0,256]$. W poniższym kodzie użyta została funkcji cvtColor(img, img, CV_RGB2GRAY);, która konwertuje obraz do formatu w odcinaniach szarości.

#include <cstdlib>
#include <iostream>
#include <opencv2/highgui/highgui.hpp>
#include <opencv2/opencv.hpp>
using namespace cv;
using namespace std;
int main(){  
  Mat img = imread("./LENA_512.jpg", 1 );
  cvtColor(img, img, CV_RGB2GRAY);
  for(int row=0; row < img.rows; row++){
    for(int col=0; col < img.cols; col++){
      img.at(row,col) = 0;
    }
  }  
  imshow( "Black", img );  
  waitKey();          
  return 0;   
}

Teraz zmienimy piksele na kolorowym zdjęciu. Możemy do tego użyć funkcji która zmieni wartość na każdym z trzech kanałów zdjęcia. Dokonajmy operacji zamiany kolorów na zdjeciu.

#include <cstdlib>
#include <iostream>
#include <opencv2/highgui/highgui.hpp>
#include <opencv2/opencv.hpp>
using namespace cv;
using namespace std;
int main(){  
  Mat img = imread("./LENA_512.jpg", 1 );
  Mat img_1 = img.clone();
  for (int row=0; row < img.rows; row++){
    for (int col=0; col < img.cols; col++){
      for (int channel=0; channel < img.channels(); channel++){
        img_1.at(row,col)[channel] = 255 - img.at(row,col)[channel];
      }
    }
  }
  namedWindow( "Invert" , WINDOW_AUTOSIZE );
  imshow( "Invert" , img_1 );             
  waitKey(); 
  return 0;   
}

wyniki tej operacji zaprezentowane są na poniższej ilustracji.