一、通过调用api实现尺寸的改变

cv2.resize(src,dsize,dst=None,fx=None,fy=None,interpolation=None) 图像尺寸改变

scr:原图片;dsize:输出图像尺寸;fx:沿水平轴的比例因子;fy:沿垂直轴的比例因子;interpolation:插值方法,包括:

cv2. INTER_LINEAR,双线性插值(缺省);

cv2.INTER_NEAREST,最近邻域插值;

cv2. INTER_CUBIC,4x4像素邻域的双三次插值;

cv2. INTER_LANCZOS4,8x8像素邻域的Lanczos插值;

cv2. INTER_AREA, 像素关系重采样

二、最近邻域插值法

1.确定图像缩放比例,将原图像像素位置乘以缩放比例得到新图像像位置,如果出现小数,取最近邻的像素位置(四舍五入)

2.numpy是科学计算中的常用库,对于矩阵运算等十分方便

3.np.zeros(shape, dtype=float, order='C') 生成全零数组

Shape,数组尺寸,在此程序中设置为图像的高、宽、通道三维数组

Dtype,数组元素类型,此代码中这设置为无符号8位整数

Order,c代表与c语言类似,行优先;F代表列优先

三、双线性插值法

1.给定任意一点,以及周围已知四点(默认给定点不在已知图像矩阵中)

2.通过两次插值,通过周围四点的值插值出给定点的值

3.第一次插值,确定A1、A2点的值,根据左上、左下点求出A1,根据两点距离A1点的距离以及值进行按距离加权

P(A1) = D(A1~左上)*P(左上) + D(A1~左下)*P(左下)

同理得出A2的插值

P(A2) = D(A2~右上)*P(右上) + D(A2~右下)*P(右下)

4.第二次插值,对A1、A2进行插值得出指定点的插值

P(点) = D(A1~点)*P(A1) + D(A2~点)*P(A2)

四、代码实现

1.api

# API 实现图像尺寸改变import cv2img = cv2.imread('image01.jpg',1)
imgHeight,imgWidth,imgMode = img.shape
# 图像长、宽、通道数值获取# 压缩比设置
coe1 = 0.5
coe2 = 2
dst1Height = int(imgHeight*coe1)
dst1Width  = int(imgWidth*coe1)
dst2Height = int(imgHeight*coe2)
dst2Width  = int(imgWidth*coe2)dst1 = cv2.resize(img,(dst1Width,dst1Height))
dst2 = cv2.resize(img,(dst2Width,dst2Height))
cv2.imshow('image',dst1)
cv2.imshow('image',dst2)cv2.waitKey(0)
cv2.destroyAllWindows()

2.最近邻域插值法

# 最近邻域插值法
# 实现过程:
# 1.获取原图像信息,并设置缩放比
# 2.创建目标图像尺寸的数组
# 3.确定像素对应关系并赋值import cv2
import numpy as npimg = cv2.imread('image01.jpg',1)
imgHeight,imgWidth,imgMode = img.shape
coe = 0.5dstHeight = int(imgHeight*coe)
dstWidth = int(imgWidth*coe)
dstImg = np.zeros((dstHeight,dstWidth,imgMode),np.uint8)# 像素值确定,使用最近邻域插值
for i in range(dstHeight):for j in range(dstWidth):y = int(i/coe + 0.5)                #图像改变后图像中的位置 = 图像改变前图像中的位置 * 缩放比,改变前位置 = 改变后位置/缩放比以找到原像素值x = int(j/coe + 0.5)                #原图像A中的点a(x,y),对应的,改变后图像B中的点a'(x',y')=(x*coe,y*coe)dstImg[i,j] = img[y,x]              #所以,x = x'/coe,得到对应的原图像中的位置,并将原像素中的值赋给改变后的像素cv2.imshow('image',dstImg)cv2.waitKey(0)
cv2.destroyAllWindows()

3.双向线性插值法

#双线性插值法import cv2
import numpy as npimg = cv2.imread('image01.jpg',1)
imgHeight,imgWidth,imgMode = img.shape
coe = 0.5dstHeight = int(imgHeight*coe)
dstWidth = int(imgWidth*coe)
dstImg = np.zeros((dstHeight,dstWidth,imgMode),np.uint8)# 像素值确定,使用双线性插值
for i in range(dstHeight):for j in range(dstWidth):y = i / coe                         #确定所求点位置x = j / coedy1 = y - int(y)                    #确定A1、A2与四点的距离dy2 = int(y + 1) - ydx1 = x - int(x)dx2 = int(x + 1) - x#确定A1、A2插值A1 = dy1 * img[int(y), int(x)] + dy2 * img[int(y), int(x + 1)]A2 = dy1 * img[int(y + 1), int(x)] + dy2 * img[int(y + 1), int(x + 1)]dstImg[i, j] = dx1 * A1 + dx2 * A2cv2.imshow('image',dstImg)cv2.waitKey(0)
cv2.destroyAllWindows()

opencv学习4——图像缩放相关推荐

  1. opencv学习---计算图像的水平积分投影和垂直积分投影

    opencv学习---计算图像的水平积分投影和垂直积分投影 标签: opencv水平积分投影垂直积分投影 2016-12-07 18:48 1806人阅读 评论(1) 收藏 举报 分类: opencv ...

  2. OpenCV学习(2)——图像的数据格式BGR

    OpenCV学习(2)--图像的BGR格式解读 1. opencv读取的图片数据格式 2. BGR含义 1. opencv读取的图片数据格式 opencv读取的图片数据格式为numpy的nparray ...

  3. 【opencv学习】图像特征检测

    import cv2 import numpy as np import matplotlib.pyplot as plt# 什么是特征? # 当你看到芒果图像时,如何识别它是芒果? # 通过分析颜色 ...

  4. Opencv学习笔记——图像伪色彩增强

    以下均为github上opencv的个人学习笔记,原路径如下: https://github.com/JimmyHHua/opencv_tutorials 源码示例: import cv2 as cv ...

  5. OpenCV学习——绘制图像灰色直方图

    一.环境 OpenCV3.4.1 VS2015 二.代码 #include <opencv2/opencv.hpp> using namespace std; #pragma commen ...

  6. Opencv学习笔记——图像基本操作

    文章目录 前言 一.数据读取-图像 1.读取图像 2.读取部分图像 二.数据读取-视频 三.颜色通道提取 四.边界填充 五.数值计算 六.图像融合 前言 先说一些图像的基本知识: (1)图像由像素构成 ...

  7. opencv学习系列——图像对比度亮度调节

    实验2.1:对比度调整 设计一个Sigmoid函数,实现对图像的对比度调整(使用opencv窗口系统的slider控件,交互改变Sigmoid函数的参数,实现不同程度的对比度调整:) (1)线性函数调 ...

  8. OpenCV学习(12) 图像的腐蚀与膨胀(3)

    通过使用不同的结构元素来进行膨胀腐蚀操作,可以检测图像中的角点,下面就一步一步看这个算法如果实现角点检测. 原图像: 首先我们创建四个结构元素 先用十字结构元素对原图像进行膨胀操作,得到下面的图像 再 ...

  9. opencv学习笔记——图像

    图像 读入图像 全英文路径下图像的读取: retval = cv2.imread(文件名[,显示控制参数]) 含中文路径下图像的读取: retval = cv2.imdecode(np.fromfil ...

最新文章

  1. 从0到1构建数据科学竞赛知识体系,有夕,鱼佬,茂霖等竞赛大咖将特邀分享...
  2. pycharm中import呈现灰色原因
  3. LeetCode Array Partition I
  4. oracle多次发运,Oracle EBS 关于发运收集整理
  5. 【Python】青少年蓝桥杯_每日一题_8.19_数字组合
  6. 如何在 Java 中正确使用 wait, notify 和 notifyAll – 以生产者消费者模型为例
  7. 一个理性战胜感性的成功案例:P2P投资和活期理财,纠结中提炼出来的1个数学问题...
  8. java 解决时间相减问题
  9. FastCGI - How to run fastcgi and nginx on windows
  10. Linux 文件系统IO性能优化
  11. 图像的频率谱和功率谱代表什么_功率谱估计:BT ,周期图,Bartlett ,AR ,MVDR,APES,MUSIC...
  12. ffmpeg中的sws_scale算法性能测试
  13. node.js学习文档_学习NodeJs从每天一个小知识点开始
  14. Improving Opencv 4: The Core Functionality :Operations with images
  15. android五中布局 四大组件,Android 四大组件五大布局
  16. 联想电脑硬盘保护系统EDU8.0.1iso安装
  17. CAD增强属性块的还原
  18. 基础LSB算法的matlab实现
  19. python企业文档管理系统django
  20. ios搜索(可实现模糊搜索 支持拼音检索 首字母等)

热门文章

  1. python 列表 元祖_Python_列表与元祖
  2. rails select下拉框
  3. C++之命令(Command)模式
  4. Ubuntu16.04 安装 CUDA、CUDNN、OpenCV 并用 Anaconda 配置 Tensorflow 和 Caffe 详细过程
  5. 【Git从入门到精通】02-深入Git
  6. 文凯博士出席2021珠海全国高性能计算机学术年会
  7. linux 时区 0900是哪,c#-解析DateTime的时区为PST / CEST / UTC /
  8. 2021-10-29PS自学第4天——移动工具的使用
  9. UML正日薄西山的13个理由
  10. android 输入日语 外键盘,日语外来语怎么用键盘输入