(二) 基本操作 - 图片的拉伸与缩放

2023-10-26

图片缩放用到的主要函数是:cv2.resize, 它最简单的形式如下:

cv2.resize(img, (new_width, new_height))

其中,img为源图片,new_width, new_height 为缩放后的宽度和高度,函数返回缩放后的图片。具体用法如下面的例子。

示例1

import cv2

# 读取图片
img = cv2.imread("lenna.jpg")
# 显示图片
cv2.imshow("img-org", img)
cv2.imshow("400x200", cv2.resize(img, (400, 200)))
cv2.imshow("250x400", cv2.resize(img, (250, 400)))
# 按任意键退出图片显示
cv2.waitKey()

其中,先读取图片,然后分别显示:原图,缩放到400*200的图片和缩放的250*400的图片,程序显示结果如下图:

其中,左上角是原图,右上角是缩放到400*200的图片,右下角缩放的250*400的图片。这个还是挺简单的,不是吗 :-)

示例2

很多时候,我们需要在缩放图片的时候保持图片的长宽比,于是有了下面的例子。

import cv2

def scale_image(image, scale):
    width = int(image.shape[1] * scale)
    height = int(image.shape[0] * scale)
    return cv2.resize(image, (width, height))
    
# 读取图片
img = cv2.imread("lenna.jpg")
# 显示图片
cv2.imshow("img-org", img)
cv2.imshow("img-scale-0.8", scale_image(img,0.8))
cv2.imshow("img-scale-2", scale_image(img,2))
# 按任意键退出图片显示
cv2.waitKey()

这里,定义了一个函数 scale_image , 其参数image为源图片,scale 代表缩放因子,可以取大于0的浮点数。(没有做入口参数的检查,不够鲁棒,你懂的!)

接下来的代码也是先读取图片,然后分别显示:原图,缩放0.8倍的图片和缩放2倍的图片,程序显示结果如下图

其中,左上角还是原图,左下角是缩放到0.8倍的图片,右边是缩放的2倍的图片。恩,还是保持长宽比的图片比较好看。

示例3

有时候,我们要把限制图片的长宽在一定范围内,比如长宽都不能超过300个像素,同时我们希望保持图片的长宽比,于是有了下面的例子。

import cv2

def scale_image(image, scale):
    width = int(image.shape[1] * scale)
    height = int(image.shape[0] * scale)
    return cv2.resize(image, (width, height))
    
def shrink_image(image, max_size):
    # 比较长度和宽度,取最大值
    length = image.shape[0]
    if length < image.shape[1]:
        length = image.shape[1]
    if length < max_size:
        return image
    else:
        scale = max_size/(length*1.0)
        return scale_image(image, scale)

# 读取图片
img_narrow = cv2.imread("narrow.jpg")
img_wide = cv2.imread("wide.jpg")
# 显示图片
cv2.imshow("n-org", img_narrow)
cv2.imshow("n-shrink",shrink_image(img_narrow,300))
cv2.imshow("w-org", img_wide)
cv2.imshow("w-shrink",shrink_image(img_wide,300))
# 按任意键退出图片显示
cv2.waitKey()

这里新定义了一个shrink_image 函数, 参数image是源图片, max_size是最大尺寸(同时限定宽度和高度)。

接下来的代码读取两张图片,一张宽图,一张窄图,然后分别显示:原图,已经缩小后的图片,它们的长和宽都不超过300个像素,程序显示结果如下图

 其中,左上角是窄图片的原图,右上角是宽图片的原图,它们的下方分别是高度和宽度被限定到300像素以内的图片。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

(二) 基本操作 - 图片的拉伸与缩放 的相关文章

  • VideoCapture 未检测到 uEye 摄像头

    我的 uEye 相机遇到了一个问题 使用我的笔记本电脑摄像头 id 0 或 USB 上的网络摄像头 id 1 此行完美运行 TheVideoCapturer open 1 TheVideoCapturer 属于 VideoCapture 类
  • 如何将 OpenCV 的测试框架与 CMake 结合使用?

    好像 OpenCV 有一个测试框架 https github com Itseez opencv tree ef91d7e8830c36785f0b6fdbf2045da48413dd76 modules ts include opencv
  • 基于 OpenCV 边缘的物体检测 C++

    我有一个应用程序 我必须检测场景中某些项目的存在 这些项目可以旋转并稍微缩放 更大或更小 我尝试过使用关键点检测器 但它们不够快且不够准确 因此 我决定首先使用 Canny 或更快的边缘检测算法 检测模板和搜索区域中的边缘 然后匹配边缘以查
  • OpenCv 与 Android studio 1.3+ 使用新的 gradle - 未定义的参考

    我在使用原生 OpenCv 2 4 11 3 0 0 也可以 和 Android Studio 1 3 以及新的 ndk 支持时遇到问题 所有关于 mk 文件的教程 但我想将它与新的实验性 gradle 一起使用 使用 Kiran 答案An
  • Opencv C++ 检测并裁剪图像上的白色区域

    我在网上搜索过 已经找到了一些方法来完成我想要的事情 但是与我需要的相比 这些方法的效率较低 我有一个 kinect 使用 Microsoft SDK 当前正在获取一个移除背景的人 将结果保存在 3 通道 Mat 中 并将该人从背景中移除
  • 寻找两个框架之间的变换

    我有来自视频源的两个连续帧 并且我使用 FAST 算法检测这两个帧的关键点 我使用平方差之和法 SSD 来匹配关键点 所以基本上我已经匹配了两个框架之间的关键点 现在我想根据匹配的关键点集计算两个帧之间的仿射变换 缩放 旋转 平移 我知道如
  • 通过 cmake 链接作为外部项目包含的 opencv 库[重复]

    这个问题在这里已经有答案了 我对 cmake 比较陌生 经过几天的努力无法弄清楚以下事情 我有一个依赖于 opencv 的项目 它本身就是一个 cmake 项目 我想静态链接 opencv 库 我正在做的是我的项目中有一份 opencv 源
  • OpenCV OpenNI 校准kinect

    我使用 home 通过 kinect 进行捕捉 capture retrieve depthMap CV CAP OPENNI DEPTH MAP capture retrieve bgrImage CV CAP OPENNI BGR IM
  • opencv - 在图像中绘制轮廓

    我正在尝试在图像周围绘制轮廓 我可以看到找到了轮廓 但无法绘制轮廓 轮廓的颜色似乎是两种 黑色和白色 颜色中的一种 import cv2 import numpy as np import matplotlib pyplot as plt
  • 如何根据图像中的对象大小(以像素为单位)来测量现实世界中的对象大小(例如英寸、厘米等)?

    我计算了物体的大小pixel来自包含对象的图像 我想测量现实世界中物体的大小 有没有办法找出乘数来测量实际尺寸 我目前正在使用python以便实施 通常 您将使用相机获取图像 该相机通过镜头将 3 维场景投影到 2 维传感器上 垂直 高度
  • 多线程中的 OpenCV CascadeClassifier C++ 接口

    我想在多个线程中使用 CascadeClassifier 对象运行 OpenCV C 接口 我的程序的工作方式是我的主线程将 some file xml 加载到 CascadeClassifier 对象中 生成三个或更多线程并向它们传递级联
  • OpenCV:RGB 到 YUV 转换,并显示维基百科等通道

    我一直在寻找这种转换有一段时间了 在Linux上使用Python将RGB图像转换为YUV图像并访问Y U和V通道有哪些方法 使用 opencv skimage 等 更新 我用的是opencv img yuv cv2 cvtColor ima
  • 如何填充接触图像边框的轮廓?

    假设我有以下从输出创建的二进制图像cv watershed 现在我想找到并填充轮廓 这样我就可以将相应的对象与原始图像中的背景 由分水岭函数分割 分开 为了分割图像并找到轮廓 我使用下面的代码 cv Mat bgr cv imread te
  • opencv潜在支持向量机[关闭]

    很难说出这里问的是什么 这个问题是含糊的 模糊的 不完整的 过于宽泛的或修辞性的 无法以目前的形式得到合理的回答 如需帮助澄清此问题以便重新打开 访问帮助中心 help reopen questions 我想使用基于部件的模型进行对象分类
  • 如何在不使用OpenCV Python中的split函数的情况下获取图像的单一颜色通道?

    我想强调一下用于实时手势识别的手 我观察到 使用 cv2 imsplit 函数 手的图像对于不同的颜色通道会以不同的方式突出显示 但这种分割功能在时间上是非常昂贵的 我无法使用 Numpy 索引执行相同的功能 如官方网站 https doc
  • HOGDescriptor 带有视频来识别物体

    不幸的是 我既是 python 又是 openCV 初学者 所以如果问题很愚蠢 请原谅我 我正在尝试使用cv2 HOGDescriptor识别视频中的物体 我关心的是逐帧识别 即没有跟踪等 这是我正在做的事情 我读了视频 目前是 mpg 通
  • 如何从图像中提取 RGB 并仅将 RG 绘制为图形? R 代表 X,G 代表 Y

    我正在尝试从图像中提取 RGB 分量并使用 matplotlib 绘制 3D RGB 直方图 但我不知道该怎么做 这是我当前的代码 import cv2 import numpy as np from scipy import ndimag
  • 将曲线图案与图像边缘匹配

    我有一个要搜索沿其边缘的曲线的目标图像和一个包含该曲线的模板图像 我需要实现的是在目标图像中找到模板图像中的曲线的最佳匹配 并根据分数来判断是否匹配 这还包括曲线的旋转和大小调整 目标图像可以是 Canny Edge 检测器的输出 如果这能
  • 如何使用 BoW 正确训练 OpenCV SVM

    我无法训练 SVM 识别我的对象 我正在尝试使用 SURF Bag Of Words SVM 来做到这一点 我的问题是分类器没有检测到任何东西 所有结果都是0 这是我的代码 Ptr
  • FindFundamentalMatrix 未找到基本矩阵

    我正在尝试使用以下方法恢复相机的运动 基本矩阵 以及给出的算法维基百科 https en wikipedia org wiki Fundamental matrix computer vision 为了 我需要找到基本矩阵 我在用OpenC

随机推荐

  • python错误:AttributeError: 'list' object has no attribute 'sorted'

    列表学习的错误 AttributeError list object has no attribute sorted 没有注意sort 和sorted 的区别 sort 是方法 sorted 是函数 方法是调用 函数进行数据传递 So 区别
  • Shadow Mapping 的原理与实践

    早在上世纪七十年代末 Williams在他的 Casting Curved Shadows on Curved Surface 一文中提出了名为Shadow Map的阴影生成技术 之后 他人在此基础上针对相关问题做了许多改进 现在 Shad
  • Wireshark分析DHCP

    DHCP DNS和HTTP是3种常见的高层协议 一 动态主机配置协议DHCP 1 DHCP简介 DHCP Dynamic Host Configuration Protocol 动态主机配置协议 是一个应用层协议 当我们将客户主机ip地址设
  • Spring Boot获取登录用户IP

    控制器方法 RequestMapping value getIp method RequestMethod POST ResponseBody public String getIp HttpServletRequest request r
  • Tcp协议中的3次握手与4次挥手过程分析

    转载https blog csdn net u012824097 article details 52490091 客户端与服务端的通信中步骤 1建立Tcp连接 3次握手 2再进行数据传输 3数据传输完成后 断开连接 4次挥手 建立Tcp连
  • vscode的终端无法识别pnpm命令

    vscode的终端无法识别pnpm命令 windows pnpm已安装 且打开cmd可以运行pnpm 但使用vscode中的终端则无法识别 执行以下命令即可在vscode中运行 原因未知 iwr https get pnpm io inst
  • 减肥怎么减?最全减肥食谱(超厉害的)

    夏天已经到了 对于许多人来说这也是减肥的季节 如果你正在进行减肥 你可能会想知道如何合理地饮食来达到瘦身的目的 你是否曾在某音或某书上搜索 减肥食谱 并发现大量重复的菜式 而且各种相关视频分散在不同的网页上 让你寻找很是麻烦 现在我就介绍一
  • 性能优化方法

    1 纯函数的可缓存性 纯函数相同的输入总能得到相同的输出 如果函数内部的计算非常复杂 当我们发现输入与上一次相同时 可以直接返回结果不经过内部的计算 例子 根据日期 得到当日相关的数据 传入日期 获取当天的数据 function proce
  • unity shader errors unexcepted token ‘f’

    编写或导入shader时候 Inspector视图中可能会出现这个错误 Syntax error unexcepted token f at line xxx 解决办法 在报错行附近查找 有没有float数据 改为浮点值 真相如下 lt
  • yarn 安装依赖中出现的错误

    yarn 清除缓存问题 1 出现报错信息 error https registry yarnpkg com Integrity check failed for computed integrity doesn t match our re
  • 抢先一步,新华三携手HPE正在重塑AI存储新格局

    当前智能IT的创新 正呈现出蓬勃发展之势 全球存储观察 热点关注 当前 数字经济在中国获得了长足进步 并驱动着算力快速进化 为此 智能IT的创新也呈现出了前所未有的蓬勃之势 从智能存储中枢发布到现在 新华三集团持续强化存储融合AI的创新 将
  • 国仁网络资讯:抖音快手哪个变现赚钱效果好;两者有什么区别?

    随着5G时代的到来 越来越多的人说到短视频风口 而短视频中首当其冲的肯定是抖音和快手 对于所有想要把握流量风口的企业来说 在营销渠道上到底是侧重抖音还是快手是营销团队需要思考的问题 快手 记录世界 记录你 抖音 记录美好生活 人们经常会拿抖
  • main,restricted,universe,multiverse有什么区别

    main restricted universe multiverse有什么区别 转载 main 完全的自由软件 restricted 不完全的自由软件 universe ubuntu官方不提供支持与补丁 全靠社区支持 muitiverse
  • mysql 8.0以上版本,安装及解决忘记密码问题

    1 官网下载解压版MySQL数据库 下载链接 https dev mysql com downloads mysql 2 将下载的mysql放在自己喜欢的盘符 不一定是C盘 例如我的就是解压在D盘 D mysql mysql 8 0 18
  • 三角形设计测试用例

    三角形设计测试用例的问题在面试的时候经常遇到 假设输入三个整数a b c分别作为三边的边长构成三角形 通过程序判定所构成的三角形的类型 当此三角形为一般三角形 等腰三角形及等边三角形时 要求画出程序的流程图和时序图 并且用自己熟悉的一种语言
  • 解决Windows缺少api-ms-win-core-com-l1-1-0.dll文件问题

    其实很多用户玩单机游戏或者安装软件的时候就出现过这种问题 如果是新手第一时间会认为是软件或游戏出错了 其实并不是这样 其主要原因就是你电脑系统的该dll文件丢失了或者损坏了 这时你只需下载这个api ms win core com l1 1
  • 程切换问题

    处理器总处于以下状态中的一种 内核态 运行于进程上下文 内核代表进程运行于内核空间 内核态 运行于中断上下文 内核代表硬件运行于内核空间 用户态 运行于用户空间 一个进程的上下文可以分为三个部分 用户级上下文 寄存器上下文以及系统级上下文
  • SQL文本数据格式化的方法(sql-formatter)

    首先安装sql formatter npm install sql formatter save 或者 yarn add sql formatter 引入sql formatter import sqlFormatter from sql
  • JAVA语言功能的概述,JAVA语言概述总结

    J2ME 主要用于控制移动设备和信息家电等有限存储的设备 J2SE 整个Java技术的核心和基础 是J2ME和J2EE编程的基础 J2EE Java技术中应用最广泛的部分 J2EE提供了企业应用开发的完整解决方案 流行语言比较 1 c Mi
  • (二) 基本操作 - 图片的拉伸与缩放

    图片缩放用到的主要函数是 cv2 resize 它最简单的形式如下 cv2 resize img new width new height 其中 img为源图片 new width new height 为缩放后的宽度和高度 函数返回缩放后