OpenCV-学习历程13- 图像上采样及降采样+图像金字塔概念+DOG

OPENCV系列博客主要记录自己学习OPENCV的历程,以及存储已经实现的代码,以备后续回顾使用,代码中包含了主要的备注。

一. 图像金字塔概念

     概念如下图:最重要的性质是:通过图像金字塔进行上采样或者降采样,图像的特征信息不变。

     图像金字塔种类: 包括高斯金字塔(降采样用)和拉普拉斯金字塔(根据图片上层降采样图片,重建一张图片)。

                    

                 

                  

               

二. 上采样,下采样相关API

                      

三. 实现代码

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


using namespace std;
using namespace cv;



int main(int argc, char** argv) {

	Mat src, dst,dst_2;
	//Step1 读取图片
	src = imread("E:/OpenCVLearning/Project/source_image/sample.jpg"); //注意斜线方向
	if (!src.data) {
		cout << "Could not load the image ...." << endl;
		return -1;
	}
	char Original_Win[] = "Original_image";
	namedWindow(Original_Win, CV_WINDOW_AUTOSIZE);
	imshow(Original_Win, src);


	//Step2 上采样
	pyrUp(src,dst,Size(src.cols *2,src.rows *2)); //上采样(输入,输出, 行列均2倍)
	char Output_Win[] = "pryUP";
	namedWindow(Output_Win, CV_WINDOW_AUTOSIZE);
	imshow(Output_Win, dst);



	//Step3 下采样
	//      原理:先高斯模糊->删除偶数行和列
	pyrDown(src, dst_2, Size(src.cols * 0.5, src.rows * 0.5));
	char Output_Win2[] = "pryDown";
	namedWindow(Output_Win2, CV_WINDOW_AUTOSIZE);
	imshow(Output_Win2, dst_2);

	//Step4 高斯不同(DOG)!!!
	//实际上就是: 1.将原图转换为灰度图; 2.对原图高斯模糊1次 为g1 ;3 对g1 高斯模糊为g2; 4 两者相减即是DOG
	Mat gray_src, g1, g2;
	Mat dog_img; //!!!!DOG结果
	cvtColor(src, gray_src,CV_BGR2GRAY);
	GaussianBlur(gray_src, g1, Size(3, 3), 0, 0);
	GaussianBlur(g1, g2, Size(3, 3), 0, 0);

	subtract(g1, g2, dog_img, Mat());
	normalize(dog_img, dog_img,255,0,NORM_MINMAX); //!!知识点:归一化: 将两幅图的差别,最大变为255,最小归为0,以便于显示
	
	imshow("DOG",dog_img);

	waitKey(0);
	return 0;
}

四.效果

猜你喜欢

转载自blog.csdn.net/weixin_42503785/article/details/113927959
今日推荐