OpenCVを使ってLenaさんの黒いところを拡大する。(0009)

Lenaさんの黒いところをちょっと拡大する。 これが何の役に立つのか?

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

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

//
// ここから
//
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 = getMin(image,j,i);
                tmp.at<uchar>(j, i) = cv::saturate_cast<uchar>(change);
            }
        }
        image = tmp.clone();
    }
    //画面に出して!!
    display(image);
}

黒いところが太くなった!! 回りのピクセルは黒(ごかんべんを!!)

f:id:treehitsuji:20150201165901p:plain