博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
图像缩放--最近邻插值
阅读量:6639 次
发布时间:2019-06-25

本文共 1602 字,大约阅读时间需要 5 分钟。

hot3.png

这种方法的优点是速度快,在放大倍数不大的时候,与其他几种算法效果差别不大

1. 用 P (i,j)表示目标图像的像素点(RGB),P(x,y)表示源图像的像素点(RGB)

2. 求解水平和垂直缩放因子

double horFactor = srcWidth / dstWidth;double verFactor = srcHeight / dstHeight;

3.计算 P(i,j)在源图中的映射 P(x0,y0)

double x0 = i * verFactor;double y0 = j * horFactor;

 4. 计算离P(x0,y0)最近的像素点 P(x,y)

int x = round(x0);int y = round(y0);

 5. 得出目标图像 P(i,j)的像素值

P_dst(i,j).R = P_src(x,y).R;P_dst(i,j).G = P_src(x,y).G;P_dst(i,j).B = P_src(x,y).B;

 6. Source Code

uint8_t *Scaling(uint8_t *src, int srcWidth, int srcHeight, int dstWidth, int dstHeight){	uint8_t *buf = new uint8_t[dstWidth * dstHeight * 3];	double horFactor = double(srcWidth) / dstWidth;  //水平缩放因子	double verFactor = double(srcHeight) / dstHeight; //垂直缩放因子	int x0, y0;	for (int i = 0; i < dstHeight; i++)	{		x0 = int(i * verFactor);		for (int j = 0; j < dstWidth; j++)		{			y0 = int(j * horFactor);			int srcOffset = (x0 * srcWidth + y0) * 3; // RGB 			int dstOffset = (i * dstWidth + j) * 3;   //RGB			buf[dstOffset + 0] = src[srcOffset + 0]; // B			buf[dstOffset + 1] = src[srcOffset + 1]; // G			buf[dstOffset + 2] = src[srcOffset + 2]; // R		}	}	return buf;}

 测试代码:

int main(int argc, char *argv[]){	JpegDecoder decoder("02.jpg");	auto &img = decoder.Decoder();	uint8_t *scale = Scaling(img.Data, img.Width, img.Height, img.Width / 2, img.Height / 2);	cv::Mat src, dst;	src.create(img.Height, img.Width, CV_8UC3);	dst.create(img.Height / 2, img.Width / 2, CV_8UC3);	src.data = img.Data;	dst.data = scale;	cv::imshow("src", src);	cv::imshow("dst", dst);	cv::waitKey();	return 0;}

JpegDecoder: 

运行示例:

转载于:https://my.oschina.net/tigerBin/blog/1142625

你可能感兴趣的文章
动态规划6-最长上升子序列
查看>>
shell 中各种符号的含义
查看>>
Zabbix 3.0 LTS安装配置
查看>>
PHP基础
查看>>
【IPC进程间通讯之三】内存映射文件Mapping File
查看>>
能用图形分析
查看>>
从装mac mini ssd硬盘所想到的
查看>>
《CSS设计禅机(the Zen of CSS Design)》译者序(草稿)
查看>>
【Android SOAP】基于第三方开源项目ksoap-android
查看>>
用Python开始机器学习(2:决策树分类算法)
查看>>
敏捷技能修炼:敏捷软件开发与设计的最佳实践
查看>>
ChartFX for .NET 6.0.1262.25350 破解
查看>>
msm8610 lcd driver code analysis
查看>>
csharp: read excel using Aspose.Cells
查看>>
简单的邮件客户端
查看>>
Java Socket重要参数讲解
查看>>
【转】C++的继承与多态:为什么需要虚函数
查看>>
Redis如何处理客户端连接
查看>>
js中document.documentElement 和document.body 以及其属性 clientWidth等
查看>>
怎么在DataGridView中动态添加DateTimePicker列?
查看>>