2017년 9월 14일 목요일

opencv interpolation(Nearest neighbor interpolation)


 단순확장, 최근방 이웃 확장

Mat 생성방법 2가지
//forward mapping
// backward mapping,

#pragma warning(disable: 4819)

#include "opencv2/opencv.hpp"
#include <iostream>

using namespace cv;
using namespace std;

int main(void)
{
    Mat src = imread("lenna.bmp", IMREAD_GRAYSCALE);

// MAT
    Mat dst;
    dst.create(src.rows*2, src.cols*2, src.type());
    dst.setTo(Scalar(0));
// MAT
    Mat dst2(src.rows * 2, src.cols * 2, src.type(),Scalar(0));
    //Mat dst2(src.rows * 2, src.cols * 2, src.type());
//forward mapping
    for (int j = 0; j < src.rows; j++) {
        uchar *ptr = src.ptr(j);
        for (int i = 0; i < src.cols; i++)
        {
            dst.at<uchar>(j * 2, i * 2) = src.at<uchar>(j, i);//data ����
            dst2.at<uchar>(j * 2, i * 2) = ptr[i];//ptr ����
        }
    }
    imshow("src", src);
    imshow("dst", dst);
    imshow("dst2", dst2);
    
    Mat dst3(src.rows * 2, src.cols * 2, src.type(),Scalar(0));
    Mat dst4(src.rows * 2, src.cols * 2, src.type(), Scalar(0));
    // backward mapping, nearest neighbor interpolation
    for (int j = 0; j < src.rows * 2; j++)
    {
        uchar * ptr2 = src.ptr<uchar>(cvRound(j/2));
        for (int i = 0; i < src.cols * 2; i++) {

            dst3.at<uchar>(j, i) = ptr2[cvRound(i/2)];
            dst4.at<uchar>(j, i) = src.at<uchar>(cvRound(j / 2), cvRound(i / 2));
        }
    }
    imshow("dst3", dst3);
    imshow("dst4", dst4);
/* // 숫자 반올림 확인
for (int k = 0; k < 50; k++) {
    cout << "k : "<<k<<",cvRound(k/2) : "<<cvRound(k/2)<< ", cvRound(k/2.f) : " <<cvRound(k/2.f)<<", k/2 : "<<k/2<<", k/2.f : "<<k/2.f<<endl;
}*/


    waitKey(0);
    return 0;
}