计算机视觉——opencv快速入门(二) 图像的基本操作
前言
上一篇文章中我们介绍了如何配置opencv,而在这篇文章我们主要介绍的是如何使用opencv来是实现一些常见的图像操作。
图像的读取,显示与存储
读取图像文件
在opencv中我们利用imread函数来读取图像文件,函数语法如下:
image=cv2.imread(path,flag)
参数说明:
image:返回来的所读取的对象,如果读取失败,返回None.path:图像路径flag:可选参数,又可叫图像旗标,用来说明图像读取的格式,省略则按照默认图像格式来读取。
下面我们来看一个简单的示例:
import cv2cv2.namedWindow("image", cv2.WINDOW_NORMAL)
img = cv2.imread(r'C:\\Users\\fengxu\Desktop\\Screenshots\\1b8fc10d60dbe62d15237451f13408a1.jpg')
cv2.resizeWindow("image", 600,400)
cv2.imshow("image", img)# 等待按键后关闭窗口,否则imshow的窗口会立即消失
cv2.waitKey(0)
cv2.destroyAllWindows()
这就是一个非常简单的加载图像的代码了。
图像的显示与图像窗口的关闭
基于opencv实现图像的显示
在opencv中我们可以基于cv.imshow()函数将读取的图像对象显示在opencv窗口上,函数定义如下:
cv2.imshow(window_name,image)
参数说明:
window_name:要显示窗口的标题image:要显示的图像对象
示例代码:
import cv2# 创建一个可调整大小的窗口
cv2.namedWindow("image", cv2.WINDOW_NORMAL)# 读取图像文件
img = cv2.imread(r'./source/a.png')# 检查图像是否成功读取
if img is None:print("无法读取图像文件,请检查路径是否正确。")
else:# 显示图像cv2.imshow("image", img)cv2.waitKey(0) # 等待按键输入,参数为0表示无限等待,直到按下任意键cv2.destroyAllWindows() # 关闭所有OpenCV窗口
运行结果:

如何关闭opencv窗口
当我们将图片显示在opencv窗口后,除了点击关闭按钮关闭,还可以使用下列函数:
cv2.destoryWindow(window_name); # 删除指定窗口
cv2.destoryAllWindows(); # 删除所有窗口
控制按键事件
opencv可以通过cv2.waitkey()函数来等待按键事件,函数语法如下:
ret_key=cv2.waitkey(delay);
参数说明:
ret_key:如果没有按下键盘上的值,返回值是-1,否则是按键对应的ASCII值delay:单位为毫秒
示例:
- 5秒后关闭:
import cv2# 创建一个可调整大小的窗口
cv2.namedWindow("image", cv2.WINDOW_NORMAL)# 读取图像文件
img = cv2.imread(r'./source/a.png')# 检查图像是否成功读取
if img is None:print("无法读取图像文件,请检查路径是否正确。")
else:# 显示图像cv2.imshow("image", img)cv2.waitKey(10000) # 等待10秒cv2.destroyAllWindows() # 关闭所有OpenCV窗口
- 按q键退出
import cv2# 创建一个可调整大小的窗口
cv2.namedWindow("image", cv2.WINDOW_NORMAL)# 读取图像文件
img = cv2.imread(r'./source/a.png')# 检查图像是否成功读取
if img is None:print("无法读取图像文件,请检查路径是否正确。")
else:# 显示图像cv2.imshow("image", img)ret_key=cv2.waitKey(0) if ret_key == ord('q'): # # 如果按下q键,则退出cv2.destroyAllWindows() # 关闭所有OpenCV窗口
调整图像窗口的大小
我们在使用imshow函数创建窗口显示图像时,窗口的大小是固定,但是我们可以通过namedWindow()函数建立未来要显示图像的窗口。
cv2.namedWindow(window_name,flag)
-
flag:窗口旗标参数,类型有:
cv2.WINDOW_NORMAL:用户可以自行调整窗口cv2.WINDOW_AUTOSIZE:自动调整大小cv2.WINDOW_OPENGL:支持以OPENGL的方式打开窗口
图像的存储
在opencv中我们可以使用imwrite函数存储图像,函数声明如下:
ret=cv2.imwrite(path,image)
成功返回True,失败返回False
示例代码:
import cv2# 创建一个可调整大小的窗口
cv2.namedWindow("image", cv2.WINDOW_NORMAL)# 读取图像文件
img = cv2.imread(r'./source/a.png')# 检查图像是否成功读取
if img is None:print("无法读取图像文件,请检查路径是否正确。")ret=cv2.imwrite("./source/output.png", img)
if ret:print("图像保存成功。")
else:print("图像保存失败。")cv2.waitKey(0)

运行后我们发现source文件夹下出现了我想要保存的结果
课后练习
选择一张图片,分别以灰色与彩色两种方式读取,同时以_color后缀存储彩色图片,_gray存储灰色照片
# 彩色
import cv2# 创建一个可调整大小的窗口
cv2.namedWindow("image1", cv2.WINDOW_NORMAL)# 读取图像文件
img1 = cv2.imread(r'./source/a.png')
cv2.imshow("image1", img1)
cv2.waitKey(0)# 检查图像是否成功读取
if img1 is None:print("无法读取图像文件,请检查路径是否正确。")ret=cv2.imwrite("./source/a_color.png", img1)
if ret:print("图像保存成功。")
else:print("图像保存失败。")
# 灰色
import cv2# 创建一个可调整大小的窗口
cv2.namedWindow("image2", cv2.WINDOW_NORMAL)# 读取图像文件
img2 = cv2.imread(r'./source/a.png', cv2.IMREAD_GRAYSCALE)
cv2.imshow("image2", img2)
cv2.waitKey(0)# 检查图像是否成功读取
if img2 is None:print("无法读取图像文件,请检查路径是否正确。")ret=cv2.imwrite("./source/a_gray.png", img2)
if ret:print("图像保存成功。")
else:print("图像保存失败。")相关文章:
计算机视觉——opencv快速入门(二) 图像的基本操作
前言 上一篇文章中我们介绍了如何配置opencv,而在这篇文章我们主要介绍的是如何使用opencv来是实现一些常见的图像操作。 图像的读取,显示与存储 读取图像文件 在opencv中我们利用imread函数来读取图像文件,函数语法如下: imagecv2.imre…...
ViewPager
作用 实现翻页的效果。 1、在activity_main.xml中创建ViewPager <?xml version"1.0" encoding"utf-8"?> <LinearLayout xmlns:android"http://schemas.android.com/apk/res/android"android:layout_width"match_parent"…...
linux watchdog 子系统
目录 一、watchdog 子系统二、关键数据结构2.1 watchdog_device2.2 watchdog_ops2.3 watchdog_info 三、重要流程3.1 watchdog 初始化3.2 watchdog 设备注册3.3 watchdog 设备文件操作函数3.4 watchdog 喂狗用户空间 watchdog(busybox)内核空间喂狗疑问 …...
论文引用h指数
文章目录 1、描述2、关键字3、思路4、notes5、复杂度6、code 1、描述 给你一个整数数组 citations ,其中 citations[i] 表示研究者的第 i 篇论文被引用的次数。计算并返回该研究者的 h 指数。 根据维基百科上 h 指数的定义:h 代表“高引用次数” &…...
四、Python日志系统之日志文件的备份和删除
import os import datetime import logging from watchdog.events import FileSystemEventHandler from watchdog.observers import Observer """实现代码中处理日志文件的备份和删除""" class UserLog:def __init__(self):self.logger logging…...
Android Camera Framework:从基础到高级
目录 基础知识1. Camera API 与 Camera2 API2. 权限 关键组件1. CameraManager2. CameraDevice3. CaptureRequest 和 CaptureSession 高级功能1. 实时滤镜2. 手动控制3. 高动态范围 (HDR) 和夜间模式 在现代移动应用开发中,相机功能已成为许多应用程序的核心组成部分…...
面向 Rust 新手的 Cargo 教程:轻松上手
面向 Rust 新手的 Cargo 教程:轻松上手 引言Cargo 简介定义与重要性与传统构建工具的对比 安装与配置 Cargo在不同操作系统上安装 Rust 和 CargoWindowsmacOSLinux 配置 Cargo 环境变量与路径第一个 Cargo 项目 主要功能概述结语 引言 在编程语言的浩瀚宇宙中&…...
MSPM0G3507——时钟配置(与32关系)
先将32端时钟配置分为1,2,3如图 1是PSC左边未经分频的时钟源(HZ) 2是经过PSC分频的时钟信号(HZ) 3是最终的输出信号(HZ) 3输出的是一个定时器周期的HZ,可以转换成时间 …...
Linux 创建新虚拟机的全过程图解
一、创建新虚拟机 1.选择自定义 2.直接下一步 3.选择稍后安装 4.设置虚拟机名和安装位置 5.配置处理器(处理器数量:4、每个处理器的内核:2) 6. 内存选择 7.网络类型 8. IO控制器类型-默认推荐 9.磁盘类型-默认推荐 10.选择虚拟磁…...
【已解决】腾讯云安装了redis,但是本地访问不到,连接不上
汇总了我踩过的所有问题。 查看配置文件redis.conf 1、把bind 127.0.0.1给注释掉(前面加个#就是)或者改成bind 0.0.0.0,因为刚下载时它是默认只让本地访问。(linux查找文档里的内容可以输入/后面加需要匹配的内容,然后…...
python批量去除图片文字水印
#!/usr/bin/env python # -*- coding:utf-8 -*- # 需要安装的库 # pip install paddlepaddle -i https://mirrors.aliyun.com/pypi/simple/ # pip install paddleocr -i https://mirrors.aliyun.com/pypi/simple/ # pip install cv2 -i https://mirrors.aliyun.com/pypi/simple…...
C++ Qt 自制开源科学计算器
C Qt 自制开源科学计算器 项目地址 软件下载地址 目录 0. 效果预览1. 数据库准备2. 按键&快捷键说明3. 颜色切换功能(初版)4. 未来开发展望5. 联系邮箱 0. 效果预览 普通计算模式效果如下: 科学计算模式效果如下: 更具体的功能演示视频见如下链接…...
相机光学(二十八)——感光度(ISO)
感光度又称为ISO,是指相机对光线的敏感程度。ISO值越大,感光度越高,拍出来的照片就会越亮,反之就会越暗。但是ISO过高会使照片噪点也随之变高。感光度,又称为ISO值,是衡量底片对于光的灵敏程度,…...
基于全国产复旦微JFM7K325T+ARM人工智能数据处理平台
复旦微可以配合的ARM平台有:RK3588/TI AM62X/ NXP IMX.8P/飞腾FT2000等。 产品概述 基于PCIE总线架构的高性能数据预处理FMC载板,板卡采用复旦微的JFM7K325T FPGA作为实时处理器,实现各个接口之间的互联。该板卡可以实现100%国产化。 板卡具…...
HarmonyOS Next应用开发之系统概述
一、鸿蒙系统概述 鸿蒙系统可以分为华为鸿蒙系统(HUAWEI HarmonyOS)和开源鸿蒙系统(OpenHarmony),华为鸿蒙系统是基于OpenHarmony基础之上开发的商业版操作系统。他们二者的关系可以用下图来表示: 1.1、…...
RedHat运维-Linux SSH基础2-基于公钥认证
1. 要想配置基于公钥认证的SSH连接,而不是基于密码认证的SSH连接,只需要将自己的公钥传送给对方即可,假如公钥是~/.ssh/id_rsa.pub,对方是centos192.168.197.128,则命令是____________________________________&#x…...
机器学习模型运用在机器人上
机器学习模型在机器人技术中的应用非常广泛,涵盖了从简单的运动控制到复杂的认知和交互功能。以下是几种机器学习模型在机器人上的典型应用: 感知与识别: 计算机视觉:使用卷积神经网络(CNNs)识别和理解视觉…...
振弦采集仪在大型工程安全监测中的作用与意义
振弦采集仪在大型工程安全监测中的作用与意义 河北稳控科技振弦采集仪是一种用于测量振动频率的仪器,常用于大型工程的安全监测中。它通过采集振弦的振动信号,可以对工程结构的振动特性进行实时监测和分析。振弦采集仪在大型工程安全监测中具有重要的作…...
CVE-2024-36991:Splunk Enterprise任意文件读取漏洞复现 [附POC]
文章目录 CVE-2024-36991:Splunk Enterprise任意文件读取漏洞复现 [附POC]0x01 前言0x02 漏洞描述0x03 影响版本0x04 漏洞环境0x05 漏洞复现1.访问漏洞环境2.构造POC3.复现0x06 修复建议CVE-2024-36991:Splunk Enterprise任意文件读取漏洞复现 [附POC] 0x01 前言 免责声明:…...
Python的utils库详解
Python的utils库并不是一个官方标准库,而是指一系列提供实用功能的工具库或模块,这些库或模块通常包含了一系列帮助开发人员加速日常工作、提高开发效率的工具函数或类。由于Python社区的开放性和活跃性,存在多个不同的utils库,每…...
【快手拥抱开源】通过快手团队开源的 KwaiCoder-AutoThink-preview 解锁大语言模型的潜力
引言: 在人工智能快速发展的浪潮中,快手Kwaipilot团队推出的 KwaiCoder-AutoThink-preview 具有里程碑意义——这是首个公开的AutoThink大语言模型(LLM)。该模型代表着该领域的重大突破,通过独特方式融合思考与非思考…...
Keil 中设置 STM32 Flash 和 RAM 地址详解
文章目录 Keil 中设置 STM32 Flash 和 RAM 地址详解一、Flash 和 RAM 配置界面(Target 选项卡)1. IROM1(用于配置 Flash)2. IRAM1(用于配置 RAM)二、链接器设置界面(Linker 选项卡)1. 勾选“Use Memory Layout from Target Dialog”2. 查看链接器参数(如果没有勾选上面…...
【Web 进阶篇】优雅的接口设计:统一响应、全局异常处理与参数校验
系列回顾: 在上一篇中,我们成功地为应用集成了数据库,并使用 Spring Data JPA 实现了基本的 CRUD API。我们的应用现在能“记忆”数据了!但是,如果你仔细审视那些 API,会发现它们还很“粗糙”:有…...
根据万维钢·精英日课6的内容,使用AI(2025)可以参考以下方法:
根据万维钢精英日课6的内容,使用AI(2025)可以参考以下方法: 四个洞见 模型已经比人聪明:以ChatGPT o3为代表的AI非常强大,能运用高级理论解释道理、引用最新学术论文,生成对顶尖科学家都有用的…...
Android 之 kotlin 语言学习笔记三(Kotlin-Java 互操作)
参考官方文档:https://developer.android.google.cn/kotlin/interop?hlzh-cn 一、Java(供 Kotlin 使用) 1、不得使用硬关键字 不要使用 Kotlin 的任何硬关键字作为方法的名称 或字段。允许使用 Kotlin 的软关键字、修饰符关键字和特殊标识…...
Linux 中如何提取压缩文件 ?
Linux 是一种流行的开源操作系统,它提供了许多工具来管理、压缩和解压缩文件。压缩文件有助于节省存储空间,使数据传输更快。本指南将向您展示如何在 Linux 中提取不同类型的压缩文件。 1. Unpacking ZIP Files ZIP 文件是非常常见的,要在 …...
RabbitMQ入门4.1.0版本(基于java、SpringBoot操作)
RabbitMQ 一、RabbitMQ概述 RabbitMQ RabbitMQ最初由LShift和CohesiveFT于2007年开发,后来由Pivotal Software Inc.(现为VMware子公司)接管。RabbitMQ 是一个开源的消息代理和队列服务器,用 Erlang 语言编写。广泛应用于各种分布…...
uniapp手机号一键登录保姆级教程(包含前端和后端)
目录 前置条件创建uniapp项目并关联uniClound云空间开启一键登录模块并开通一键登录服务编写云函数并上传部署获取手机号流程(第一种) 前端直接调用云函数获取手机号(第三种)后台调用云函数获取手机号 错误码常见问题 前置条件 手机安装有sim卡手机开启…...
Kubernetes 网络模型深度解析:Pod IP 与 Service 的负载均衡机制,Service到底是什么?
Pod IP 的本质与特性 Pod IP 的定位 纯端点地址:Pod IP 是分配给 Pod 网络命名空间的真实 IP 地址(如 10.244.1.2)无特殊名称:在 Kubernetes 中,它通常被称为 “Pod IP” 或 “容器 IP”生命周期:与 Pod …...
Python网页自动化Selenium中文文档
1. 安装 1.1. 安装 Selenium Python bindings 提供了一个简单的API,让你使用Selenium WebDriver来编写功能/校验测试。 通过Selenium Python的API,你可以非常直观的使用Selenium WebDriver的所有功能。 Selenium Python bindings 使用非常简洁方便的A…...
