图片的上下采样。
上采样得到更高分辨率的图像(宽高2倍),下采样得到原来图像宽高的1/2;
高斯金字塔--用来对图像进行下采样;
拉普拉斯金字塔--用来重建一张图片根据它的上层下采样图片。
代码如下(包含高斯模糊和归一化显示):
#include<opencv2/opencv.hpp>
#include<iostream>
using namespace std;
using namespace cv;
int main(int argc, char** argv) {
Mat dst, s_down, g1, g2, gray_src, dogImg;
Mat src = imread("D:\\sougou\\image\\1.jpg");
if (!src.data) {
printf("could not load image...\n");
return -1;
}
char input_image[] = "input image";
char output_image1[] = "up image";
char output_image2[] = "down image";
namedWindow(input_image, WINDOW_AUTOSIZE);
namedWindow(output_image1, WINDOW_AUTOSIZE);
namedWindow(output_image2, WINDOW_AUTOSIZE);
imshow(input_image, src);
//上采样
pyrUp(src, dst, Size(src.cols * 2, src.rows * 2));
imshow(output_image1, dst);
//下采样
pyrDown(src, s_down, Size(src.cols / 2, src.rows / 2));
imshow(output_image2, s_down);
//DOG
cvtColor(src, gray_src, CV_BGR2GRAY);
imshow("gray image", gray_src);
GaussianBlur(gray_src, g1, Size(5, 5), 0, 0);
GaussianBlur(g1, g2, Size(5, 5), 0, 0);
subtract(g1, g2, dogImg, Mat());
//归一化显示
normalize(dogImg, dogImg, 255, 0, NORM_MINMAX);
imshow("final image", dogImg);
waitKey(0);
return 0;
}
效果: