(二)雙線性插值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.pswp.cn/news/531334.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/531334.shtml
英文地址,請注明出處:http://en.pswp.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…