OpenCVを使ってLenaさんをぼかす。(0007)

OpenCVを使ってLenaさんをぼかす。 エッジはごかんべんを!!

//画面をだすよ
void display(cv::Mat image) {
    //名前をつける
    std::string windowName = "windowName";
    cv::namedWindow(windowName);
    //画面位置固定
    cv::moveWindow(windowName, 100, 100);
    //画面出た!!
    cv::imshow(windowName, image);
    //なにかキーをおして~
    cv::waitKey(0);
    //整理整頓
    cv::destroyWindow(windowName);
}

//
// ここから
//
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 image = cv::Mat::zeros(cols, rows, CV_8UC1);

    uchar up,down,left,right;
    uchar upleft,downleft;
    uchar upright,downright;
    uchar anchor;

    for (int j = 1; j < rows - 1; j++) {
        for (int i = 1; i < cols - 1; i++) {
            up = lena.at<uchar>(j - 1, i);
            down = lena.at<uchar>(j + 1, i);
            left = lena.at<uchar>(j, i - 1);
            right = lena.at<uchar>(j, i + 1);

            upleft = lena.at<uchar>(j - 1, i-1);
            upright = lena.at<uchar>(j - 1, i+1);
            downleft = lena.at<uchar>(j + 1, i-1);
            downright = lena.at<uchar>(j + 1, i+1);
            anchor = lena.at<uchar>(j, i);

                image.at<uchar>(j, i) =
                        cv::saturate_cast<uchar>(
                                anchor/9
                                +up/9
                                +down/9
                                +left/9
                                +right/9
                                +upleft/9
                                +upright/9
                                +downleft/9
                                +downright/9
                );
        }
    }

    //画面に出して!!
    display(image);

}

白黒

f:id:treehitsuji:20150118142431p:plain

ぼかし

f:id:treehitsuji:20150127065845p:plain