2019-01-10 00:24:47 qq_42887760 阅读数 859
  • JMETER 性能测试入门到项目实战视频课程

    1、本课程针对JMETER软件性能测试八大组件:配置元件、前置处理器、定时器、sampler(采样器)、后 置处理器、断言、监听器以及逻辑控制器等内容全方位讲解。 2、参数化、badboy测试脚本开发以及录制方法,正则表达式之Regextester工具使用、JMETER 组件作 用域等知识点讲解。 3、本课程注重实践每一个知识点都有相对应的实例,本书覆盖的实例多达上百个,提高学员的动手能 力和解决问题能力。 4、区块链之币币交易所资管系统性能测试,登录、交易买入、交易卖出等测试场景设计、脚本开发/调试、数据 准备、性能调优、性能测试报告。       5、性能测试流程和性能瓶颈定位等知识讲解。

    174422 人正在学习 去看看 陈槐

图像金字塔概念

  1. 我们在图像处理中常常会调整图像大小,最常见的就是放大(zoom in)和缩小(zoom out),尽管几何变换也可以实现图像放大和缩小,但是这里我们介绍图像金字塔
  2. 一个图像金字塔式一系列的图像组成,最底下一张是图像尺寸最大,最上方的图像尺寸最小,从空间上从上向下看就想一个古代的金字塔。
    在这里插入图片描述
  • 高斯金子塔 – 用来对图像进行降采样
  • 拉普拉斯金字塔 – 用来重建一张图片根据它的上层降采样图片(分辨率较低)

图像金字塔概念 – 高斯金字塔

  • 高斯金子塔是从底向上,逐层降采样得到。
  • 降采样之后图像大小是原图像MxN的M/2 x N/2 ,就是对原图像删除偶数行与列,即得到降采样之后上一层的图片。
  • 高斯金子塔的生成过程分为两步:
    • 1.对当前层进行高斯模糊
    • 2.删除当前层的偶数行与列
      即可得到上一层的图像,这样上一层跟下一层相比,都只有它的1/4大小。
      在这里插入图片描述

高斯不同(Difference of Gaussian-DOG)

  • 定义:就是把同一张图像在不同的参数下做高斯模糊之后的结果相减,得到的输出图像。称为高斯不同(DOG)
  • 高斯不同是图像的内在特征,在灰度图像增强、角点检测中经常用到。

采样相关API

  • 上采样(cv::pyrUp) – zoom in 放大
    pyrUp(Mat src, Mat dst, Size(src.cols2, src.rows2))
    生成的图像是原图在宽与高各放大两倍

  • 降采样 (cv::pyrDown) – zoom out 缩小
    pyrDown(Mat src, Mat dst, Size(src.cols/2, src.rows/2))
    生成的图像是原图在宽与高各缩小1/2

代码案例:

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

using namespace cv;

int main(){
	//1. 加载图像和显示原图
	Mat src=imread("E:/Experiment/OpenCV/Pictures/dog2.jpg");
	if(src.empty()){
		printf("could not load image...");
		return -1;
	}
	namedWindow("input_windows",CV_WINDOW_AUTOSIZE);
	imshow("input_windows",src);//显示图片

	//2. 创建两个Mat对象来存储操作的结果,并执行采样操作
	Mat dst1,dst2;
	//2.1. 上采样
	pyrUp(src, dst1, Size(src.cols * 2, src.rows * 2));//上采样,生成的图像是原图在宽与高各放大两倍
    imshow("pyrUp", dst1);
	//2.2. 下采样
    pyrDown(src, dst2, Size(src.cols / 2, src.rows / 2));//降采样,生成的图像是原图在宽与高各缩小1/2
    imshow("pyrDown", dst2);


	//高斯不同
	Mat gray_src,gblur1,gblur2,gblur3,dogImg,dogImg2,dogImg3;
	cvtColor(src, gray_src, COLOR_BGR2GRAY);

	GaussianBlur(gray_src, gblur1, Size(3, 3), 0, 0);
    GaussianBlur(gblur1, gblur2, Size(3, 3), 0, 0);//方式一
    subtract(gblur1, gblur2, dogImg, Mat());//获取 DOG ,应该要低的gblur1减高的gblur2
    //将灰度图的0-255空间,转换到0-1空间(二值空间),让原本淡淡的图像变得清楚了
    normalize(dogImg, dogImg, 255, 0, NORM_MINMAX);//参数:255最大值,0最小值,NORM_MINMAX 最大最小化
    imshow("dogImg", dogImg);//能看到淡淡的猫的眼睛的轮廓
	GaussianBlur(gray_src, gblur3, Size(5, 5), 0, 0);
    subtract(gblur1, gblur3, dogImg2, Mat());//方式二
    normalize(dogImg2, dogImg2, 255, 0, NORM_MINMAX);
    imshow("dogImg2", dogImg2);//也能看到淡淡的猫的眼睛的轮廓

    subtract(gblur2, gblur1, dogImg3, Mat());//高减低的
    normalize(dogImg3, dogImg3, 255, 0, NORM_MINMAX);
    imshow("dogImg3", dogImg3);

	waitKey(0);
	return 0;
}

运行截图:

在这里插入图片描述
在这里插入图片描述

小案例:

1. 加载图片
2. 进行上采样(按’u’后):
3. 执行下采样(按’d’后):
4. 退出程序(按’Esc’后):

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

using namespace cv;


int main(){
	//1. 加载图像和显示原图
	Mat src=imread("E:/Experiment/OpenCV/Pictures/dog2.jpg");
	if(src.empty()){
		printf("could not load image...");
		return -1;
	}
	namedWindow("input_windows",CV_WINDOW_AUTOSIZE);
	imshow("input_windows",src);//显示图片
	
	Mat temp,dst;
	temp=src;
	dst=temp;
	while(true){
		int c;
		c = waitKey(10);
		if( (char)c == 27 ){//Esc键
			break;
		}
		else if( (char)c == 'u' ){ 
			pyrUp( temp, dst, Size( temp.cols*2, temp.rows*2 ) );
			printf( "** Zoom In: Image x 2 \n" );
		}
		else if( (char)c == 'd' )
		{ 
			pyrDown( temp, dst, Size( temp.cols/2, temp.rows/2 ) );
			printf( "** Zoom Out: Image / 2 \n" );
		}
		imshow( "output_windows", dst );
		temp = dst;
	}

	waitKey(0);
	return 0;
}

推荐博客

  1. https://blog.csdn.net/LYKymy/article/details/83153927
  2. https://blog.csdn.net/huanghuangjin/article/details/80958983
2019-01-17 17:53:20 qq_34814092 阅读数 354
  • JMETER 性能测试入门到项目实战视频课程

    1、本课程针对JMETER软件性能测试八大组件:配置元件、前置处理器、定时器、sampler(采样器)、后 置处理器、断言、监听器以及逻辑控制器等内容全方位讲解。 2、参数化、badboy测试脚本开发以及录制方法,正则表达式之Regextester工具使用、JMETER 组件作 用域等知识点讲解。 3、本课程注重实践每一个知识点都有相对应的实例,本书覆盖的实例多达上百个,提高学员的动手能 力和解决问题能力。 4、区块链之币币交易所资管系统性能测试,登录、交易买入、交易卖出等测试场景设计、脚本开发/调试、数据 准备、性能调优、性能测试报告。       5、性能测试流程和性能瓶颈定位等知识讲解。

    174422 人正在学习 去看看 陈槐

Java OpenCV-4.0.0 图像处理09 图像的上采样和降采样及归一化

Java OpenCV-4.0.0 图像处理 图像的上采样和降采样及归一化

归一化就是要把需要处理的数据经过处理后(通过某种算法)限制在你需要的一定范围内。首先归一化是为了后面数据处理的方便,其次是保证程序运行时收敛加快。归一化的具体作用是归纳统一样本的统计分布性。
归一化在0-1之间是统计的概率分布,归一化在某个区间上是统计的坐标分布。归一化有同一、统一和合一的意思。
归一化的目的,是使得没有可比性的数据变得具有可比性,同时又保持相比较的两个数据之间的相对关系,如大小关系;或是为了作图,原来很难在一张图上作出来,归一化后就可以很方便的给出图上的相对位置等。


/**
 * OpenCV-4.0.0 图片上采样(放大)
 * @return: void  
 * @date: 2019年5月7日12:16:55
 */
public static void zoomIn() {
	Mat src=Imgcodecs.imread("C:\\Users\\Administrator\\Pictures\\99.png");
	Mat dst=new Mat();
	Imgproc.pyrUp(src,dst,new Size(src.cols()*2,src.rows()*2));
	HighGui.imshow("图片上采样(放大)", dst);
	HighGui.waitKey(0);
}

/**
 * OpenCV-4.0.0 图片降采样 (缩小)
 * @return: void  
 * @date: 2019年5月7日12:16:55
 */
public static void zoomOut() {
	Mat src=Imgcodecs.imread("C:\\Users\\Administrator\\Pictures\\99.png");
	Mat dst=new Mat();
	Imgproc.pyrDown(src,dst,new Size(src.cols()/2,src.rows()/2));
	HighGui.imshow("图片降采样 (缩小)", dst);
	HighGui.waitKey(0);
}

/**
 * OpenCV-4.0.0 图片归一化
 * @return: void  
 * @date: 2019年5月7日12:16:55
 */
public static void normalize() {
	Mat src=Imgcodecs.imread("C:\\Users\\Administrator\\Pictures\\99.png");
	Mat gray=new Mat();
	Mat image1=new Mat();
	Mat image2=new Mat();
	Mat mask=new Mat();
	Imgproc.cvtColor(src, gray, Imgproc.COLOR_BGR2GRAY);
	Imgproc.GaussianBlur(gray, image1, new Size(3,3), 0);
	Imgproc.GaussianBlur(image1, image2, new Size(3,3), 0);
	Core.subtract(image1, image2, mask, new Mat());
	Core.normalize(mask, mask,255,0,Core.NORM_MINMAX);
	HighGui.imshow("图片归一化", mask);
	HighGui.waitKey(0);
}

图片归一化

2015-07-29 21:23:47 Kena_M 阅读数 5454
  • JMETER 性能测试入门到项目实战视频课程

    1、本课程针对JMETER软件性能测试八大组件:配置元件、前置处理器、定时器、sampler(采样器)、后 置处理器、断言、监听器以及逻辑控制器等内容全方位讲解。 2、参数化、badboy测试脚本开发以及录制方法,正则表达式之Regextester工具使用、JMETER 组件作 用域等知识点讲解。 3、本课程注重实践每一个知识点都有相对应的实例,本书覆盖的实例多达上百个,提高学员的动手能 力和解决问题能力。 4、区块链之币币交易所资管系统性能测试,登录、交易买入、交易卖出等测试场景设计、脚本开发/调试、数据 准备、性能调优、性能测试报告。       5、性能测试流程和性能瓶颈定位等知识讲解。

    174422 人正在学习 去看看 陈槐

降采样函数的高效实现

所谓降采样,就是将图像的尺寸缩减为原来的一半,隔行隔列取值,降采样在构建图像金字塔时是需要反复使用的。
假如原图像尺寸为W×H,那么降采样之后尺寸变为W2×H2,长度和宽度是奇数还是偶数,都会自动向下取整。
另外之所以发这么一个小儿科功能的文章是因为本人患有重度强迫症,这么简单的功能OpenCV肯定有,但我就是不想用,我不知道它是如何实现的,对速度不放心。由于强迫症,我对于图像数据的访问,坚持以下几个原则:

  • 能用一维向量就坚决不用二维的,因为连续存储的数据本来就是按照一维线性存储的,所谓二维是人类具象化的产物
  • 能用指针就坚决不要难过数组下标,因为根据标准C,访问指针要比访问数组更高效,访问数组时涉及到下标的索引计算,这对我来说是绝不能容忍的
  • 在使用指针一直出错烧脑时才用回数组

由此,编写了如下的函数,能看懂就尽量看吧,反正不好看,看不懂也直接可以拿来用,目前只处理了8位灰度图,太小儿科,在此露相纯粹是展示一下强迫症的魅力,就是为了追求处理的快速性,不惜脑细胞的码这种代码,反正我就认为这样的代码运行起来快速高效

unsigned char* downSampling(unsigned char *src, int width, int height, int *dwidth, int *dheight)
{
    int oddw = width % 2;
    int oddh = height % 2;
    int flag;
    *dwidth = width / 2;
    *dheight = height / 2;
    unsigned char *dst = Malloc(unsigned char, (*dwidth) * (*dheight));
    if(oddw + oddh == 0)flag = 0;
    else if(oddw + oddh == 2) flag = 3;
    else if(oddw == 0 && oddh == 1) flag = 1;
    else flag = 2;
    int i;
    unsigned char *pCur, *pEnd, *pdCur, *pdEnd;
    switch(flag)
    {
        case 0:
            for(i = 0, pCur = src, pEnd = src + width * height, pdCur = dst, pdEnd = dst + (*dwidth) * (*dheight); pdCur < pdEnd; pCur += 2, pdCur++)
            {
                i++;
                *pdCur=*pCur;
                if(i==*dwidth)
                {
                    pCur+=width;
                    i=0;
                }

            }
            break;
        case 1:
            for(i = 0, pCur = src, pEnd = src + width * height, pdCur = dst, pdEnd = dst + (*dwidth) * (*dheight); pdCur < pdEnd; pCur += 2, pdCur++)
            {
                i++;
                *pdCur=*pCur;
                if(i==*dwidth)
                {
                    pCur+=width;
                    i=0;
                }
            }
            break;
        case 2:
            for(i = 0, pCur = src, pEnd = src + width * height, pdCur = dst, pdEnd = dst + (*dwidth) * (*dheight); pdCur < pdEnd; pCur += 2, pdCur++)
            {
                i++;
                *pdCur=*pCur;
                if(i==*dwidth)
                {
                    pCur+=width+1;
                    i=0;
                }
            }
            break;
        case 3:
            for(i = 0, pCur = src, pEnd = src + width * height, pdCur = dst, pdEnd = dst + (*dwidth) * (*dheight); pdCur < pdEnd; pCur += 2, pdCur++)
            {
                i++;
                *pdCur=*pCur;
                if(i==*dwidth)
                {
                    pCur+=width+1;
                    i=0;
                }
            }
            break;
    }
    return dst;
}

FAQ:

  1. 为什么分了4个case ? 因为涉及到长度和宽度不一定为偶数啊,要是奇数时到行末地址要跳格的,自己好好想想;
  2. 为什么四种情况的前两种和后两种完全一样 ? 这是强迫症病人为以后可能出现的其他种情况留作升级用的备胎;
  3. 为什么用C语言?我只会C语言

效果

这里写图片描述


2019-02-24 17:31:47 weixin_43534296 阅读数 194
  • JMETER 性能测试入门到项目实战视频课程

    1、本课程针对JMETER软件性能测试八大组件:配置元件、前置处理器、定时器、sampler(采样器)、后 置处理器、断言、监听器以及逻辑控制器等内容全方位讲解。 2、参数化、badboy测试脚本开发以及录制方法,正则表达式之Regextester工具使用、JMETER 组件作 用域等知识点讲解。 3、本课程注重实践每一个知识点都有相对应的实例,本书覆盖的实例多达上百个,提高学员的动手能 力和解决问题能力。 4、区块链之币币交易所资管系统性能测试,登录、交易买入、交易卖出等测试场景设计、脚本开发/调试、数据 准备、性能调优、性能测试报告。       5、性能测试流程和性能瓶颈定位等知识讲解。

    174422 人正在学习 去看看 陈槐
  1. 图像金字塔概念:
    图像金字塔是图像多尺度表达的一种,是一种以多分辨率来解释图像的有效但概念简单的结构。一幅图像的金字塔是一系列以金字塔形状排列的分辨率逐步降低,且来源于同一张原始图的图像集合。其通过梯次向下采样获得,直到达到某个终止条件才停止采样。我们将一层一层的图像比喻成金字塔,层级越高,则图像越小,分辨率越低。
    在这里插入图片描述
    图像的金字塔变换我们可以理解为是一种图像的大小变换,是在保证图像的特征不变的情况下来进行图像大小的变换,图像处理中图像大小的变换中最常见的就是放大(zoom in)和缩小(zoom out),则对于图像金字塔来说从上向下变换就是放大,增大分辨率,从下向上变换就是缩小,减小分辨率。

    高斯金字塔:用来对图像进行降采样。高斯金字塔本质上为信号的多尺度表示法,亦即将同一信号或图片多次的进行高斯模糊,并且向下取样,藉以产生不同尺度下的多组信号或图片以进行后续的处理,例如在影像辨识上,可以借由比对不同尺度下的图片,以防止要寻找的内容可能在图片上有不同的大小。高斯金字塔的理论基础为尺度空间理论,而后续也衍生出了多分辨率分析。
    高斯金字塔的相关知识与概念我们可以总结为:高斯金字塔是从底向上,逐层降采样得到;降采样后的图像是原图像(像素大小为X×Y)的X/2×Y/2,也就是对原图像删除偶数行与列(即得到降采样之后上一层的图片)
    高斯金字塔的生成过程分为两部:
    ①对当前层进行高斯模糊
    ②对模糊后的图像删除当前层的偶数行与列,即可得到上一层的图像,这样子上一层与下一层图像相比都只有他的1/4大小
    高斯不同(Difference of Gaussian-DOG):
    定义:高斯不同就是把同一张图像在不同的参数下做高斯模糊之后的结果相减,得到的输出图像就成为高斯不同(DOG)
    高斯不同是图像的内在特征,在灰度图像增强、角点检测中经常用到。

    拉普拉斯金字塔:用来重建一张图片根据他的上层降采样图片。

  2. 采样用到的相关函数:
    上采样:

    CV_EXPORTS_W void pyrUp( InputArray src, 
    						 OutputArray dst,
                             const Size& dstsize = Size() );
    

    pyrUp(src,dst,Size(src.cols×2,src.rows×2))
    生成的图像是原图在宽与高各放大两倍

    下采样:

    CV_EXPORTS_W void pyrDown( InputArray src,
           					   OutputArray dst,
                               const Size& dstsize = Size() );
                               
    

    pyrDown(src,dst,Size(src.cols/2,src.rows/2))
    生成的图像是原图在宽与高各缩小一倍

  3. 实验代码及内容展示:

    #include <opencv2/opencv.hpp>
    #include <iostream>
    
    using namespace std;
    using namespace cv;
    
    int main()
    {
    	Mat src, src_up, src_down, src_dog;
    	src = imread("C:/Users/he104/Desktop/timg.jpg");
    	if (src.empty())
    	{
    		cout << "could not load the image" << endl;
    		return -1;
    	}
    	imshow("orign_image", src);
    	//UP
    	pyrUp(src, src_up, Size(src.cols * 2, src.rows * 2));
    	imshow("UP", src_up);
    	//DOWN
    	pyrDown(src, src_down, Size(src.cols / 2, src.rows / 2));
    	imshow("DOWN", src_down);
    	//DOG
    	Mat src_gray, g1, g2, dst;
    	cvtColor(src, src_gray, CV_BGR2GRAY);
    	GaussianBlur(src_gray, g1, Size(7, 7), 0, 0);
    	GaussianBlur(g1, g2, Size(7, 7), 0, 0);
    	subtract(g1, g2, dst, Mat());
    	normalize(dst, dst, 255, 0, NORM_MINMAX);
    	imshow("DOG", dst);
    	waitKey(0);
    	destroyAllWindows();
    	return 0;
    }
    

    在这里插入图片描述

2018-12-29 23:39:04 qq_40598185 阅读数 241
  • JMETER 性能测试入门到项目实战视频课程

    1、本课程针对JMETER软件性能测试八大组件:配置元件、前置处理器、定时器、sampler(采样器)、后 置处理器、断言、监听器以及逻辑控制器等内容全方位讲解。 2、参数化、badboy测试脚本开发以及录制方法,正则表达式之Regextester工具使用、JMETER 组件作 用域等知识点讲解。 3、本课程注重实践每一个知识点都有相对应的实例,本书覆盖的实例多达上百个,提高学员的动手能 力和解决问题能力。 4、区块链之币币交易所资管系统性能测试,登录、交易买入、交易卖出等测试场景设计、脚本开发/调试、数据 准备、性能调优、性能测试报告。       5、性能测试流程和性能瓶颈定位等知识讲解。

    174422 人正在学习 去看看 陈槐

    这里我们将从两个方面进行频域增强的学习

一、任选两幅图像(包括一副自备图像),计算其频谱图,并显示

 

 

二、采用频域滤波的方法进行图像降采样和升采样

 

一、首先计算其频谱图,用到的库函数如下:

CV_EXPORTS_W void dft(InputArray src, OutputArray dst, int flags = 0, int nonzeroRows = 0);

在进行dft之前我们需要提取图片的行和列的像素值,然后创建一个二维的数组来储存傅里叶变换的实部和虚部。

进行完dft之后,我们需要重新排列傅里叶图像的象限,使原点位于中心。

代码实现如下:

Mat Fourier_transform(Mat& imag)
{
	int r = getOptimalDFTSize(imag.rows);
	int c = getOptimalDFTSize(imag.cols);
	Mat padded;
	copyMakeBorder(imag, padded, 0, r - imag.rows, 0, c - imag.cols, BORDER_CONSTANT, Scalar::all(0));

	//为傅里叶变换的结果(复数,包含实部和虚部,所以需要创建一个二维的数组
	//分配存储空间,
	//需要用至少float型来存储
	//最后将二维数组合并为二通道--傅里叶变换需要
	Mat dst1[] = { Mat_<float>(padded), Mat::zeros(padded.size(), CV_32F) };
	Mat dst2;
	merge(dst1, 2, dst2);

	//傅里叶变换,结果依旧存储在dst2中
	dft(dst2, dst2);
	//将复数换算成幅值
	split(dst2, dst1);//把二通道图像分解为二维数组,保存到dst1中,dst1[0]中存放的为实部
	magnitude(dst1[0], dst1[1], dst1[0]);//结果存放在dst1[0]中
	Mat magnitudeImage = dst1[0];


	//对数尺度缩放以便于显示
	//计算log(1 + sqrt(Re(DFT(dst2))**2 + Im(DFT(dst2))**2))
	magnitudeImage += Scalar::all(1);
	log(magnitudeImage, magnitudeImage);

	//剪切和重分布幅度图象限
	//若有奇数行或奇数列,进行频谱裁剪
	magnitudeImage = magnitudeImage(Rect(0, 0, magnitudeImage.cols & -2,    magnitudeImage.rows & -2));//任何一个数&-2的结果一定是偶数

	//重新排列傅里叶图像的象限,使原点位于图像中心
	int cx = magnitudeImage.cols / 2;
	int cy = magnitudeImage.rows / 2;
	Mat q0(magnitudeImage(Rect(0, 0, cx, cy)));
	Mat q1(magnitudeImage(Rect(cx, 0, cx, cy)));
	Mat q2(magnitudeImage(Rect(0, cy, cx, cy)));
	Mat q3(magnitudeImage(Rect(cy, cy, cx, cy)));

	Mat tmp;
	q0.copyTo(tmp);
	q3.copyTo(q0);
	tmp.copyTo(q3);
	q1.copyTo(tmp);
	q2.copyTo(q1);
	tmp.copyTo(q2);

	//将幅度值归一化到0~1之间,这是因为magnitudeImage中的数据类型是浮点型,这时用imshow()来显示函数,会将像素值乘于255,因此需要归一化到0~1之间
         normalize(magnitudeImage, magnitudeImage, 0, 1,NORM_MINMAX);


	//返回最后的频谱图像
	return magnitudeImage;
}

其效果图如下:

 

二、采用频域滤波的方法进行图像降采样和升采样

这里我们主要用到的库函数如下:

CV_EXPORTS_W void pyrDown( InputArray src, OutputArray dst,const Size& dstsize = Size(), int borderType = BORDER_DEFAULT ); //降采样函数
CV_EXPORTS_W void pyrUp( InputArray src, OutputArray dst,const Size& dstsize = Size(), int borderType = BORDER_DEFAULT );//升采样函数

高斯金字塔–降采样

高斯金字塔从底向上,逐层降采样取得,不能跨域越层;

对当前层删除偶数行与列就得到降采样后上一层的图片;

 

高斯金字塔生成步骤:

①进行高斯模糊;

②删除偶数行与列。

 

升采样则与之相反。

代码如下:

//降采样
Mat PyrDownTest(Mat& imag)
{
	Mat dest1, dest2;
	pyrDown(imag, dest1, Size(imag.cols/2 , imag.rows/2 ));
	pyrDown(dest1, dest2, Size(dest1.cols / 2, dest1.rows / 2));
	return dest2;
}
//升采样
Mat PyrupTest(Mat& imag)
{
	Mat dest1, dest2;
	pyrUp(imag, dest1, Size(imag.cols * 2, imag.rows * 2));
	pyrUp(dest1, dest2, Size(dest2.cols * 2, dest2.rows * 2));
	return dest2;
}

效果图如下:

主函数如下:

int main()
{
	/*
        Mat img = imread("5.jpg");
	Mat src = imread("p3-05.tif", CV_LOAD_IMAGE_GRAYSCALE);
	Mat src_1 = imread("1.jpg", CV_LOAD_IMAGE_GRAYSCALE);

	if (!img.data)
	{
		std::cout << "Image->img Load Fail!!!" << "\n";
		return 1;
	}
	if (!src.data)
	{
		std::cout << "Image->scr Load Fail!!!" << "\n";
		return 1;
	}
	if (!src_1.data)
	{
		std::cout << "Image-scr_1 Load Fail!!!" << "\n";
		return 1;
	}*/

	/**********************傅里叶变换*************************/
	//namedWindow("【载入的图片1】", CV_WINDOW_AUTOSIZE);
	//imshow("【载入的图片1】", src);

	//namedWindow("【载入的图片2】", CV_WINDOW_AUTOSIZE);
	//imshow("【载入的图片2】", src_1);
	// Mat show_img, show_img_1;
	//show_img = Fourier_transform(src);
	//show_img_1 = Fourier_transform(src_1);
	//imshow("【傅里叶变换后的图片1】", show_img);
	//imshow("【傅里叶变换后的图片2】", show_img_1);
	/*****************************************************/
	/**********************升采样,降采样*************************/
	/*namedWindow("【载入的图片】", CV_WINDOW_AUTOSIZE);
	imshow("【载入的图片】", img);
	Mat show_img;
	show_img = PyrDownTest(img);
	imshow("【降采样后的图片】", show_img);
	show_img = PyrupTest(show_img);
	imshow("【升采样后的图片】", show_img);*/
	/*****************************************************/
	waitKey(0);
	return 0;
}

按照自己的需要进行相应的处理即可。

完。

没有更多推荐了,返回首页