(二)双线性插值python实现

这里写目录标题

      • (一)原始图像
      • (二)双线性插值原理
      • (三)python实现
          • 1. 安装库
          • 2. python程序编写
          • 3. 效果
          • 4. 工程文件

(一)原始图像

请添加图片描述

(二)双线性插值原理

一般情况下我们对图像缩放的时候会进行上采样或下采样,上采样常采用插值来实现,本文章使用双线性插值实现图像放大
双线性插值的核心思想是在两个方向上分别进行一次插值,关于下图的解释可以参考百度百科:双线性插值
在这里插入图片描述

使用双线性插值注意将目标图形和原图像几何中心重合在计算插值,双线性插值只会使用临近的四个像素点坐标,先求x的单线性插值,再求y的单线性插值
这里举例来说明:

关于中心对齐可以参考:双线性插值,个人认为上面中心对齐时+0.5是因为图像坐标从0开始,所以对于33的图像只有(0 1 2)对应到55的图像(0 1 2 3 4),它们的宽高比为5/3,对于33的2只能到25/3=3.3,永远到不了4这个地方,只能先+0.5才能到4,(2+0.5)*5/3=4.1请添加图片描述

(三)python实现

python安装可以参考:python安装

1. 安装库

首先我们需要安装用到的库,按住win+r输入cmd打开dos窗口,输入下面的命令

pip install opencv-python
pip install numpy

在这里插入图片描述

2. python程序编写
import cv2 # cv2 即opencv的库
import numpy as np #给numpy起别名np,该库Numerical Python是python的数学函数库#双线性插值实现
def bilinear_interpolation(img,out_dim):src_h,src_w,channels = img.shapedst_h,dst_w = out_dim[1],out_dim[0]print("src_h,src_w= ",src_h,src_w)print("dst_h,dst_w= ",dst_h,dst_w)if src_h == dst_h and src_w == dst_w:return img.copy()dst_img = np.zeros((dst_h,dst_w,3),dtype=np.uint8)scale_x,scale_y = float(src_w)/dst_w,float(src_h)/dst_hfor i in range(3):for dst_y in range(dst_h):for dst_x in range (dst_w):#根据几何中心重合找出目标像素的坐标src_x = (dst_x+0.5)*scale_x -0.5src_y = (dst_y+0.5)*scale_y -0.5#找出目标像素最邻近的四个点src_x0 = int(np.floor(src_x))src_x1 = min(src_x0 + 1,src_w -1)src_y0 = int(np.floor(src_y))src_y1 = min(src_y0 + 1,src_h -1)#代入公式计算temp0 = (src_x1 - src_x) * img[src_y0,src_x0,i] + (src_x - src_x0) * img[src_y0,src_x1,i]temp1 = (src_x1 - src_x) * img[src_y1,src_x0,i] + (src_x - src_x0) * img[src_y1,src_x1,i]dst_img[dst_y,dst_x,i] = int((src_y1 - src_y) * temp0 + (src_y - src_y0) * temp1)return dst_imgimg = cv2.imread("lenna.png")
dst = bilinear_interpolation(img,(700,700))
cv2.imshow("blinear",dst)
cv2.waitKey()
3. 效果

在这里插入图片描述

打印信息:

======= RESTART: D:\AI\opencv\opencv\interpolation\bilinear_interpolation.py ======
src_h,src_w=  512 512
dst_h,dst_w=  700 700
4. 工程文件

线性插值函数

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/531334.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

js self = this的解释

Demo 1: function Person(){this.name hjzgg;this.age 24;this.show function(){alert(name " " age);}}var p new Person();p.show(); 错误:name 和 age都没有定义。 Demo 2: function Person(){this.name hjzgg;this.age 24;this.show functio…

(三)图像转灰度图Python实现

这里写目录标题(一)原始图像(二)转换原理(三)python实现1. 安装库2. python程序编写3. 效果4. 工程文件(一)原始图像 (二)转换原理 (三&#xff…

SD卡实例分析fat32文件系统

目录 环境描述 分析过程 1.SD卡格式化 2.使用winhex打开sd卡 3.MBR分析 4.DBR分析

java泛型上下限

前言: java的泛型上下限不是很好理解,尤其像我这种菜鸡。反反复复看了好几遍了...,真是... 一、简单的继承体系 class Person{}class Student extends Person{}class Worker extends Person{} 二、泛型上限(extends 关键字&#x…

基于matlab的步进电机仿真(一)

这里写目录标题环境准备基础准备模型参数输入和输出仿真原理图仿真资源环境准备 MatLab2021b 基础准备 打开Matlab,在帮助文档里面搜索step motor,我们这里选择如下模型 该模型实现了一个通用的步进电机模型: 可变磁阻步进电机永磁或混合步进电机 …

java自定义类加载器

前言 java反射,最常用的Class.forName()方法。做毕设的时候,接收到代码字符串,通过 JavaCompiler将代码字符串生成A.class文件(存放在classpath下,也就是eclipse项目中的bin目录里),然后通过jav…

常用网址

MDN : 一个不错的前端学习网站 https://developer.mozilla.org/zh-CN/  https://developer.mozilla.org/en-US/ CodePen 是一个网站前端设计开发平台,是一个针对网站前端代码设计的开发工具。 RunJS - 在线编辑、展示、分享、交流你的 JavaScript 代码 : http://r…

repo介绍(一)

repo简介 Repo 是我们以 Git 为基础构建的代码库管理工具,可以组织多个仓库的上传和下载。它是由一系列的Python脚本组成,封装了一系列的Git命令,用来统一管理多个Git仓库 一个大型的项目可能由很多小的仓库组合而成的,为了方便统一管理各个…

hash长度扩展攻击

作为一个信息安全的人,打各个学校的CTF比赛是比较重要的! 最近一个朋友发了道题目过来,发现有道题目比较有意思,这里跟大家分享下 这串代码的大致意思是: 这段代码首先引入了一个名为"flag.php"的文件&am…

repo介绍(二)

这篇文章来实例操作 安装repo,参考repo介绍这一节创建repo存放default.xml 的git仓库 初始化repo,repo init -u https://gitee.com/angerial/repo-test.git 这个时候会在当前目录生成如下文件 参考repo组成,修改.repo/manifest.xml,这里我的…

springmvc环境搭建以及常见问题解决

1.新建maven工程 a) 打开eclipse,file->new->project->Maven->Maven Project b) 下一步 c) 选择创建的工程为webapp,下一步 d) 填写项目的group id和artifact id。一般情况下,group id写域名的倒序,artifact id…

eclipse build workspace太慢或者 js出错问题解决

1.js文件错误解决办法 右键项目->properties->Builders(注:JavaScript Validator也会引起 build workspace太慢) 2.Eclipse 一直不停 building workspace完美解决总结(来自: http://blog.163.com/shadow_wolf/blog/static/18346909720145279519222…

HttpUrlConnection发送url请求(后台springmvc)

1.HttpURLConnection发送url请求 public class JavaRequest {private static final String BASE_URL "http://localhost:8080/dsdemo/";public static String userToken null;public static String problemName null;public static String sendPost(String sufUrl…

springmvc+jpa实现分页的两种方式

1.工具类 public final class QueryTool {public static PageRequest buildPageRequest(int pageNumber, int pageSize, String sortType){Sort sort null;if("auto".equals(sortType)) {sort new Sort(Direction.DESC, "ctime");} else {sort new Sort…

不使用session,借助redis实现验证码

1.首先看一下基本的流程 2.看一下代码 注:其中用到的一些工具类,可以到我的github上去下载 https://github.com/hjzgg/usually_util/tree/master/utils windows 下的 redis下载 https://github.com/hjzgg/redis 获取验证码的tooken RequestMapping(value…

PS批处理的使用

一、 前言 做开发的时候,最多的时候就是图片的使用了。有时候图片的处理都按照同样的步骤,比如说统一将图片的大小调整为固定大小,或者统一在所有的图片的的某个位置上加入文字或者小图片等等,这时候PS的批处理可以帮你完成这些重…

exe4j的使用

下载:http://download.cnet.com/exe4j/3000-2070_4-144405.html 参考:http://blog.chinaunix.net/uid-25749806-id-4380850.html 注:打包成jar包的一般就是src目录,其他目录放到目标文件夹中,目录结构如下 如何解决exe…

c语言指针和数组的联系

c语言指针与数组**一、指针与一维数组**1.一维数组的存储方式2. 对一维数组名的理解3. 数组下标和指针的关系4.一位数组名与取数组首地址的区别**二、指针与二维数组**1.二维数组的存储方式2.二维数组下标和指针的对应关系例题:怀着忐忑的心情写了人生第一篇博客......诚惶诚恐…

android模拟器默认位置的修改

1.创建ANDROID_SDK_HOME环境变量,如ANDROID_SDK_HOMED:\eclipse_android\android-sdk 2.在ANDROID_SDK_HOME目录下,建立.android目录 3.默认的avd路径是C:\Users\Administrator\.android, 将里面的内容放入到ANDROID_SDK_HOME中的.android目录下 4.windo…

python 求出4行5列的二维数组周边元素之和

题目:求出4行5列的二维数组周边元素之和 代码: import random x [[random.randint(1,10)for j in range(5)]for i in range(4)] for item in x:print(item) y [x[0][0],x[0][1],x[0][2],x[0][3],x[0][4],x[1][0],x[1][4],x[2][0],x[2][4],x[3][0],x[3][4]] prin…