临沂河东建设局网站,商城网站互动性,广告设计与制作专业就业工资,百度网址大全官方下载这里写目录标题#xff08;一#xff09;原始图像#xff08;二#xff09;双线性插值原理#xff08;三#xff09;python实现1. 安装库2. python程序编写3. 效果4. 工程文件#xff08;一#xff09;原始图像 #xff08;二#xff09;双线性插值原理
一般情况下我…
这里写目录标题一原始图像二双线性插值原理三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/33.3永远到不了4这个地方只能先0.5才能到420.5*5/34.1
三python实现
python安装可以参考python安装
1. 安装库
首先我们需要安装用到的库按住winr输入cmd打开dos窗口输入下面的命令
pip install opencv-python
pip install numpy2. 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),dtypenp.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_x0.5)*scale_x -0.5src_y (dst_y0.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. 工程文件
线性插值函数