OpenCVを使ってLenaさんをシャープにする。(0006)
Lenaさんをシャープにするには隣のピクセルの値を使う
まず描くピクセル値を5倍、それだと濃すぎるので上、下、右、左の
ピクセル値を5倍した値から引く、0-255の範囲を越えると強制的に0か255にする。
隣とくらべて明るいところはさらに明るく!! その反対は暗く!!
Lenaさん回りの1ピクセルは真っ黒です。
//画面をだすよ 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"); int cols = lena.cols; int rows = lena.rows; //lenaさんと同じサイズの画像 cv::Mat image = cv::Mat::zeros(cols, rows, CV_8UC3); uchar ue[3]; uchar shita[3]; uchar hidari[3]; uchar migi[3]; for (int j = 1; j < rows - 1; j++) { for (int i = 1; i < cols - 1; i++) { for (int k = 0; k < 3; k++) { ue[k] = lena.at<cv::Vec3b>(j - 1, i)[k]; shita[k] = lena.at<cv::Vec3b>(j + 1, i)[k]; hidari[k] = lena.at<cv::Vec3b>(j, i - 1)[k]; migi[k] = lena.at<cv::Vec3b>(j, i + 1)[k]; image.at<cv::Vec3b>(j, i)[k] = cv::saturate_cast<uchar>( lena.at<cv::Vec3b>(j, i)[k] * 5 - ue[k] - shita[k] - hidari[k] - migi[k] ); } } } //画面に出して!! display(image); }
オリジナル
シャープLenaさん (ノイズもシャープに!!)