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

本文介绍三种图像尺寸调整算法:近邻算法、双插值算法及金字塔算法。通过具体实例展示了不同算法的效果对比,包括图像边缘过渡质量及处理时间等方面的差异。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

图像尺寸调整的三种算法

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;
}

运行结果如下:

在这里插入图片描述

回答: 当你在克隆代码时遇到"fatal: Out of memory, malloc failed (tried to allocate 1058576000 bytes)"的错误时,这通常是由于内存不足导致的。为了解决这个问题,你可以尝试以下方法:首先,创建一个临时目录并设置权限: sudo mkdir -p /opt/temp sudo chmod 600 /opt/temp/swapfile 然后,使用dd命令创建一个交换文件: sudo dd if=/dev/zero of=/opt/temp/swapfile bs=1M count=1024 接下来,使用mkswap命令将交换文件格式化为swap文件系统: sudo mkswap /opt/temp/swapfile 最后,使用swapon命令启用交换文件: sudo swapon /opt/temp/swapfile 这样应该能够解决内存不足的问题。\[2\] 另外,如果你想了解更多关于Git的配置信息,你可以使用以下命令来查看Git的所有配置: git config --global --list 如果你想编辑配置文件,可以使用以下命令: git config --global --edit 如果你想删除全局配置项,可以使用以下命令: git config --global --unset user.name 这些命令可以帮助你管理Git的配置信息。\[3\] #### 引用[.reference_title] - *1* *3* [Git clone代码报“fatal: Out of memory, malloc failed (tried to allocate 1058576000 bytes)”的解决...](https://blog.youkuaiyun.com/lovedingd/article/details/125595649)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insertT0,239^v3^insert_chatgpt"}} ] [.reference_item] - *2* [报错解决: fatal: Out of memory, malloc failed](https://blog.youkuaiyun.com/dfkc76453/article/details/102083479)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insertT0,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值