OpenCVを使ってLenaさんの白いところを拡大する。

こんどは黒いところでなくて白いところを拡大してみる。 これが何の役に立つのか?

//画面をだすよ
void display(cv::Mat image) {
    //まえの記事をみてね
}

//受け取ったピクセル位置の八方のなかで一番数値が大きいピクセルの数字を求める
uchar getMax(cv::Mat image, int y, int x) {
    uchar curr = 0;
    uchar max = 0;
    for (int j = -1; j <= 1; j++) {
        for (int i = -1; i <= 1; i++) {
            curr = image.at<uchar>(y + j , x + i);
            if (curr > max){
                max = curr;
            }
        }
    }
    return max;
}

//
// ここから
//
int main(int argc, char** argv) {
    //lenaさん登場!!
    cv::Mat lena = cv::imread("lena.jpg");
    //lenaさん白黒レトロ
    cv::cvtColor(lena, lena, CV_RGB2GRAY);

    int cols = lena.cols;
    int rows = lena.rows;

    //lenaさんと同じサイズの画像
    cv::Mat tmp = cv::Mat::zeros(cols, rows, CV_8UC1);
    cv::Mat image = cv::Mat::zeros(cols, rows, CV_8UC1);

    image = lena.clone();
    uchar change;
  //2回も拡大するね。
    for (int t = 0; t < 2; t++) {
        for (int j = 2; j < rows - 2; j++) {
            for (int i = 2; i < cols - 2; i++) {
                change = getMax(image,j,i);
                tmp.at<uchar>(j, i) = cv::saturate_cast<uchar>(change);
            }
        }
        image = tmp.clone();
    }
    //画面に出して!!
    display(image);
}

白いところが太くなったLenaさん。エッジは??

f:id:treehitsuji:20150201171309p:plain