【opencv】图像尺寸调整的三种算法

图像尺寸调整的三种算法

1.临近算法

INTER_NEAREST 近邻算法 :对相邻像素直接拷贝
优点: 最简单、速度最快
缺点:缩小可能有丢失问题,放大后边界可能会出现马赛克

resize()

在这里插入图片描述

第一个参数:输入图像;
**第二个参数:**输出图像;
**第三个参数:**设定尺寸;
**第四和第五个参数:**缩放比例;(设定尺寸后,缩放比例传0即可)
**第六个参数:**算法(默认 1 是双插值算法)
第六个参数有很多算法可以选择,转到定义后,你可以看到 0 是近邻算法, 1 是双插值算法

在这里插入图片描述
代码和下面的双插值算法共同展示。

2.双插值算法


INTER_LINEAR 双插值算法,对像素进行计算
优点:图像边缘过渡更平整,不会出现马赛克现象
还是resize()函数,并且是resize()的默认算法。

下面展示两种算法的效果对比:

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

using namespace std;
using namespace cv;

void PrintMs(const char*text = "")
{
	static long long last = 0;
	long long current = getTickCount();
	if (last == 0)
	{
		last = current;
		return;
	}
	long long ms = 0;
	ms = ((double)(current - last) / getTickFrequency()) * 1000;//最容易出问题的一行代码
	if (*text != 0)
	{
		/*cout << *text <<"= "<< ms << " ms" << endl;*/
		printf("%s = %d ms\n", text , ms);
	}
	last = getTickCount();
}

int main()
{
	Mat src = imread("D:\\photogallery\\人物\\image_2.png");
	Mat dest256;
	Mat ldest256;

	PrintMs("");
	//近邻算法
	resize(src, dest256, Size(2024, 2024), 0, 0, INTER_NEAREST);
	PrintMs("dest256");

	//双插值算法
	resize(src, ldest256, Size(2024, 2024), 0, 0, INTER_LINEAR);
	PrintMs("ldest256");
	
	imshow("src", src);
	imshow("近邻算法", dest256);
	imshow("双插值算法", ldest256);

	waitKey(0);
	return 0;
}

运行结果如图:
在这里插入图片描述
在这里插入图片描述

左图为临近算法,可以看在色彩边界有明显的马赛克现象,右图为双插值算法,则过渡更加平滑,但耗时略长(耗时则么会这么多?)。

3.金字塔

pyrDown()高斯金字塔 ,用来向下采样
pyrUp()拉普拉斯金字塔 , 从金字塔底层图像重建上层图像

pyrDown()

在这里插入图片描述

第一个参数:输入图像;
第二个参数:输出图像;
后面两个参数使用默认就行
pyrUp()同上;

下面看代码:

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

using namespace std;
using namespace cv;

void PrintMs(const char*text = "")
{
	static long long last = 0;
	long long current = getTickCount();
	if (last == 0)
	{
		last = current;
		return;
	}
	long long ms = 0;
	ms = ((double)(current - last) / getTickFrequency()) * 1000;//最容易出问题的一行代码
	if (*text != 0)
	{
		/*cout << *text <<"= "<< ms << " ms" << endl;*/
		printf("%s = %d ms\n", text , ms);
	}
	last = getTickCount();
}

int main()
{
	Mat src = imread("D:\\photogallery\\人物\\image_2.png");
	Mat gsrc;
	Mat lsrc;

	PrintMs("");
	pyrDown(src, gsrc);
	PrintMs("pyrDown");

	pyrUp(src, lsrc);
	PrintMs("pyrUp");

	imshow("src", src);
	imshow("高斯金字塔", gsrc);
	imshow("拉普拉斯金字塔", lsrc);

	waitKey(0);
	return 0;
}

运行结果如下:

在这里插入图片描述

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值