Praktikum Bildbearbeitung

Identitätsfilter

Zusätzlicher case

in main.cpp:


    case bba::ACTION_FILTER_IDENTITY:
      {
        cv::Mat img = stack.top();
        stack.pop();
        bba::identity(img);
        img = bba::identity(img); // alternative Form
        stack.push(img);
      }
    break;
      

Separates Modul für Filter

aufg0.hpp:


#pragma once
#include <opencv2/opencv.hpp>

namespace bba {

void identity(cv::Mat & img);

}
      

Durchlaufen aller Pixel eines Bildes

aufg0.cpp:


#include "aufg0.hpp"

bba::identity(cv::Mat & img) {
  for (int y = 0; y < img.rows; y++) {
    for (int x = 0; x < img.cols; x++) {
      // TODO
    }
  }
}
      

Zugriff auf einen Intensitätswert

in aufg0.cpp:


    img.at<unsigned char>(y,x)
      
Dokumentation cv::Mat::at<T>(y,x)cv::Mat::at<T>(i)

Ausgeben eines Intensitätswerts

in aufg0.cpp:


    std::cerr << int(img.at<unsigned char>(y,x)) << " ";
    …
  std::cerr << std::endl;
      

Setzen eines Intensitätswerts

in aufg0.cpp:


    img.at<unsigned char>(y,x) = img.at<unsigned char>(y,x);
      

Reduzieren von Redundanz

aufg0.cpp:


  for (int y = 0; y < img.rows; y++) {
    for (int x = 0; x < img.cols; x++) {
      img.at<unsigned char>(y,x) = img.at<unsigned char>(y,x);
    }
  }
      
umformulieren zu

  bba::for_each_pixel(img, [](cv::Mat & m, int y, int x) {
      m.at<unsigned char>(y,x) = m.at<unsigned char>(y,x);
  });