关于图像放缩的算法有很多,本文主要介绍双线性插值法进行图像放缩,本文参考了: http://www.cnblogs.com/funny-world/p/3162003.html

我们设源图像src的大小为m*N,目标图像的大小为a*b。无论是放大还是缩小,我们所遵循的原则就是对于目标图像的像素点 f(i,j),我们在源图像当中找到其对应点 f(x,y)。

其算法为:i/x=m/a  j/y=n/b 因此我们可以得到:x=i*(m/a)     y=j*(n/b)

但是为了使放缩的效果更好,可以使两个图片的几何中心重合,所以我们可以:x=(i+0.5)*(m/a)-0.5   y=(j+0.5)*(n/b)-0.5

通过这样算法,我们便可以在源图像当中找到目标图像的对应点了,但是这样计算 x,y 很可能是float型,因此我们需要继续对 x,y进行处理

我们可以找到 于P(所求的点)最为临近的四个点 Q11 ,Q12 ,Q21,Q22 ,通过下面的算法进行处理:

f(R1)=(X2-X)/(X2-X1)*f(Q11)+(X-X1)/(X2-X1)*f(Q21)

f(R2)=(X2-X)/(X2-X1)*f(Q12)+(X-X1)/(X2-X1)*f(Q22)

f(i,j)=(Y2-Y)/(Y2-Y1)f(R1)+(Y-Y1)/(Y2-Y1)*f(R2)

通过这样的处理,我们便可以计算出目标图像法 f(i,j)的像素值了,从而可以求出目标图像.

下面是Opencv的代码:

#include<opencv2\opencv.hpp>
#include<opencv2\core\core.hpp>
#include<opencv2\highgui\highgui.hpp>using namespace std;
using namespace cv;int main(){Mat src;src=imread("G:/save1.jpg",1);    //输入图片;if(src.empty()){return -1;}Mat dist=Mat((2*src.rows),(2*src.cols),CV_32FC3);        //目标图片,将原图放大两倍;//遍历目标图片的点,将目标图片的归溯到原图的点当中,若结果为浮点型,则按照算法计算;//归溯算法,原图大小为a*b,目标图大小m*n,i/x=a/m,j/y=b/n;float x,y;int Q11[2],Q21[2],Q12[2],Q22[2];          //Q11 Q12 Q21 Q22分别对应着与P点最为临近的四个点,P点为目标图点还原到原图的点的对应位置;float R1[3],R2[3];for(int i=0;i<dist.rows-1;i++){           //这里减2是因为对于(src.rows-1,src.cols-1)的位置对应的是(dist.rows-2,dits.cols-2),再大一点就会超过内存。for(int j=0;j<dist.cols-1;j++){x=(i+0.5)*0.5-0.5;               //通过加减0.5,将像素点移到中心点的位置,使放缩效果更好。y=(j+0.5)*0.5-0.5;Q11[0]=(int)x;Q12[0]=(int)x;Q21[0]=(int)x+1;Q22[0]=(int)x+1;Q11[1]=(int) y;Q21[1]=(int) y;Q12[1]=(int) y+1;Q22[1]=(int) y+1;// 插值法算法如下:// X1=(int)x; X2=(int)x+1; Y1=(int)y; Y2=(int)y+1;// f(R1)=(X2-X)/(X2-X1)*f(Q11)+(X-X1)/(X2-X1)*f(Q21);// f(R2)=(X2-X)/(X2-X1)*f(Q12)+(X-X1)/(X2-X1)*f(Q22);// f(i,j)=(Y2-Y)/(Y2-Y1)f(R1)+(Y-Y1)/(Y2-Y1)*f(R2);for(int m=0;m<3;m++){R1[m]=((Q21[0]-x)*src.at<Vec3b>(Q11[0],Q11[1])[m])+((x-Q11[0])*src.at<Vec3b>(Q21[0],Q21[1])[m]);R2[m]=((Q21[0]-x)*src.at<Vec3b>(Q12[0],Q12[1])[m])+((x-Q11[0])*src.at<Vec3b>(Q22[0],Q22[1])[m]);dist.at<Vec3f>(i,j)[m]=(Q12[1]-y)*R1[m]+(y-Q11[1])*R2[m];}}}imwrite("G:/save.jpg",dist);          //输出图片;
}

View Code

转载于:https://www.cnblogs.com/code-wangjun/p/5956233.html

Opencv下双线性插值法进行图像放缩相关推荐

  1. bmp 双线性插值_基于双线性插值算法的图像放缩技术与实现_冯慧君

    九江 332000) 2 ( 闽发证券有限责任公司 上海 200031) 3 ( 华为技术有限公司 上海 200121) 摘 要 本文介绍了双线性插值算法在图像放缩领域的应用和具体实现的方法 , 并通 ...

  2. “双线性插值法”实现图像的缩放

    本学期修读"数学实验"相关课程,课程设计以"双线性插值法实现图像缩放"为研究方向,写篇博文记录一下自己的心路历程– 文章目录 前言 一.图像基础知识 二.双线性 ...

  3. 【图像处理】双线性插值法扩展图像像素及其代码实现(亚像素)

    亚像素图像 大家有没有你想过,在软件层面,如何提高图像处理的精度?比如,我们要用图像处理测量工业零件的周长,怎么在不改变硬件条件的情况下尽可能得到更高的精度? 我们平时看到的图像都是由像素点组成的,不 ...

  4. matlab图片插值数据_使用双线性插值法放大图像(matlab实现)

    双线性插值计算公式: f(i+u,j+v) = (1-u)(1-v)f(i,j)+u(1-v)f(i+1,j)+(1-u)vf(i,j+1)+uvf(i+1,j+1) 这个公式表明了如何利用矩阵中的四 ...

  5. opencv:用最邻近插值和双线性插值法实现上采样(放大图像)与下采样(缩小图像)

    上采样与下采样 概念: 上采样: 放大图像(或称为上采样(upsampling)或图像插值(interpolating))的主要目的 是放大原图像,从而可以显示在更高分辨率的显示设备上. 下采样: 缩 ...

  6. 双线性插值法图像放缩示例

    算法原理简介 双线性插值是一阶插值,常用于图像的旋转.缩放处理. 它利用原图中对应的四个点的像素值来确定目标图像中的像素值. 为了便于理解,我们来看两张尺寸不一样的图片: 原图 变换图 假设原图图片的 ...

  7. 【OpenCV图像处理】五、图像的几何变换(下)

    5.1 图像的缩放变换 图像的缩放指的是将图像的尺寸变小或变大的过程,也就是减少或增加原图像数据的像素个数.简单来说,就是通过增加或删除像素点来改变图像的尺寸.当图像缩小时,图像会变得更加清晰,当图像 ...

  8. 学无疑物-上采样之双线性插值法详解

    什么是插值 Interpolation is a method of constructing new data points within the range of a discrete set o ...

  9. 卷积神经网络 池化层上采样(upsampling、interpolating)、下采样(subsampled、downsampled)是什么?(上采样为放大图像或图像插值、下采样为缩小图像)

    缩小图像:或称为下采样(subsampled)或降采样(downsampled) 主要目的有两个:1.使得图像符合显示区域的大小:2.生成对应图像的缩略图. 放大图像:或称为上采样(upsamplin ...

最新文章

  1. R语言层次聚类(hierarchical clustering):使用scale函数进行特征缩放、hclust包层次聚类(创建距离矩阵、聚类、绘制树状图dendrogram,在树状图上绘制红色矩形框)
  2. php mysql 查询 where_PHP MySQL Where 子句
  3. 行业变革的镜子:2018年融资最多的24家美国创业公司
  4. Shell tips
  5. 11行Python代码,发现了室友U盘的惊天秘密。
  6. java中jtansforms,java – 使用AffineTransform旋转图像
  7. SpringSecurity 权限控制准备之IOC容器结构说明
  8. php去掉 x5E,清除wordpress里PHP文件恶意代码
  9. 数据结构:B树和B+树的插入、删除图文详解
  10. GDAL源码剖析(四)之命令行程序说明二
  11. [导入]在windows下建立的自己cvsnt服务器
  12. HikariCP源码分析
  13. 接口优化从20s优化到500ms
  14. MSP4302553呼吸灯(附代码)
  15. React.createElement()的使用
  16. 内网地址映射成外网可访问地址
  17. SharedPreferences 使用方法详解
  18. 接招吧微软,谷歌大脑跟DeepMind团队合并了!
  19. 解决IE6、IE8 宽度兼容
  20. 天眼——究竟是何方神圣?

热门文章

  1. css实现箭头图标 伪类 图标
  2. (每日一练python)有效的数独
  3. 科学计算机已知角度和边长怎样算斜长,计算公式
  4. 位、字节、字、字长的概念以及存储单位的的换算
  5. qnap raid5升级raid6_实践出真知!100TB的RAID5到底能否重建成功?
  6. 蓝桥杯摔手机测试次数
  7. 运营之光2.0 我的互联网运营方法论与自白
  8. 怎样在JavaScript添加图片
  9. 计算机英语世界 中英文版,看世界=SEEING THE WORLD(英文版)
  10. MyBatis-Spring(五)--MapperScannerConfigurer实现增删改查