OpenCVを使ってLenaさんを拡大する2。
前回は隙間が黒かったので今度は隙間を埋めてさらに
ぼかしをいれてなめらか拡大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さん