読者です 読者をやめる 読者になる 読者になる

OpenCVを使ってLenaさんを拡大する2。

OpenCV

前回は隙間が黒かったので今度は隙間を埋めてさらに
ぼかしをいれてなめらか拡大Lenaさんにしてみる。

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

//
// ここから
//
int main(int argc, char** argv) {
    //lenaさん登場!!
    cv::Mat lena = cv::imread("lena.jpg");
    //lenaさん白黒レトロ
    cv::cvtColor(lena, lena, CV_RGB2GRAY);
    //lenaさんの2倍のサイズの画像
    cv::Mat image  = cv::Mat::zeros(lena.cols * 2, lena.rows * 2, CV_8UC1);

    int cols = lena.cols;
    int rows = lena.rows;
    for (int j = 1; j < rows - 1 ; j++) {
        for (int i = 1; i < cols - 1; i++) {
            for (int k = -1; k < 2; k++) {
        //八方の隙間を同じ色でぬる!!
                for (int l = -1; l < 2; l++) {
                    image.at<uchar>(j*2 - k, i*2 - l) = cv::saturate_cast<uchar>(lena.at<uchar>(j, i));
                }
            }
        }
    }

    //ガウスぼかし!!でごまかし!!
     uchar up,down,left,right;
     uchar upleft,downleft;
     uchar upright,downright;
     uchar anchor;

     //lenaさんの2倍のサイズの画像
     cv::Mat image2  = cv::Mat::zeros(lena.cols * 2, lena.rows * 2, CV_8UC1);
     for (int j = 1; j < rows * 2 - 1; j++) {
         for (int i = 1; i < cols * 2 - 1; i++) {
             up = image.at<uchar>(j - 1, i);
             down = image.at<uchar>(j + 1, i);
             left = image.at<uchar>(j, i - 1);
             right = image.at<uchar>(j, i + 1);

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

             image2.at<uchar>(j, i) =
                         cv::saturate_cast<uchar>(
                                 anchor*4/16
                                 +up*2/16
                                 +down*2/16
                                 +left*2/16
                                 +right*2/16
                                 +upleft*1/16
                                 +upright*1/16
                                 +downleft*1/16
                                 +downright*1/16
                 );
         }
     }

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

2倍Lenaさん

f:id:treehitsuji:20150208185143p:plain