단순확장, 최근방 이웃 확장
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;
}
댓글 없음:
댓글 쓰기