计算机视觉——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库,每…...
UE5 学习系列(二)用户操作界面及介绍
这篇博客是 UE5 学习系列博客的第二篇,在第一篇的基础上展开这篇内容。博客参考的 B 站视频资料和第一篇的链接如下: 【Note】:如果你已经完成安装等操作,可以只执行第一篇博客中 2. 新建一个空白游戏项目 章节操作,重…...
相机Camera日志实例分析之二:相机Camx【专业模式开启直方图拍照】单帧流程日志详解
【关注我,后续持续新增专题博文,谢谢!!!】 上一篇我们讲了: 这一篇我们开始讲: 目录 一、场景操作步骤 二、日志基础关键字分级如下 三、场景日志如下: 一、场景操作步骤 操作步…...
多模态大语言模型arxiv论文略读(108)
CROME: Cross-Modal Adapters for Efficient Multimodal LLM ➡️ 论文标题:CROME: Cross-Modal Adapters for Efficient Multimodal LLM ➡️ 论文作者:Sayna Ebrahimi, Sercan O. Arik, Tejas Nama, Tomas Pfister ➡️ 研究机构: Google Cloud AI Re…...
Java面试专项一-准备篇
一、企业简历筛选规则 一般企业的简历筛选流程:首先由HR先筛选一部分简历后,在将简历给到对应的项目负责人后再进行下一步的操作。 HR如何筛选简历 例如:Boss直聘(招聘方平台) 直接按照条件进行筛选 例如:…...
JVM暂停(Stop-The-World,STW)的原因分类及对应排查方案
JVM暂停(Stop-The-World,STW)的完整原因分类及对应排查方案,结合JVM运行机制和常见故障场景整理而成: 一、GC相关暂停 1. 安全点(Safepoint)阻塞 现象:JVM暂停但无GC日志,日志显示No GCs detected。原因:JVM等待所有线程进入安全点(如…...
Mobile ALOHA全身模仿学习
一、题目 Mobile ALOHA:通过低成本全身远程操作学习双手移动操作 传统模仿学习(Imitation Learning)缺点:聚焦与桌面操作,缺乏通用任务所需的移动性和灵活性 本论文优点:(1)在ALOHA…...
深度学习习题2
1.如果增加神经网络的宽度,精确度会增加到一个特定阈值后,便开始降低。造成这一现象的可能原因是什么? A、即使增加卷积核的数量,只有少部分的核会被用作预测 B、当卷积核数量增加时,神经网络的预测能力会降低 C、当卷…...
A2A JS SDK 完整教程:快速入门指南
目录 什么是 A2A JS SDK?A2A JS 安装与设置A2A JS 核心概念创建你的第一个 A2A JS 代理A2A JS 服务端开发A2A JS 客户端使用A2A JS 高级特性A2A JS 最佳实践A2A JS 故障排除 什么是 A2A JS SDK? A2A JS SDK 是一个专为 JavaScript/TypeScript 开发者设计的强大库ÿ…...
C#中的CLR属性、依赖属性与附加属性
CLR属性的主要特征 封装性: 隐藏字段的实现细节 提供对字段的受控访问 访问控制: 可单独设置get/set访问器的可见性 可创建只读或只写属性 计算属性: 可以在getter中执行计算逻辑 不需要直接对应一个字段 验证逻辑: 可以…...
Git 3天2K星标:Datawhale 的 Happy-LLM 项目介绍(附教程)
引言 在人工智能飞速发展的今天,大语言模型(Large Language Models, LLMs)已成为技术领域的焦点。从智能写作到代码生成,LLM 的应用场景不断扩展,深刻改变了我们的工作和生活方式。然而,理解这些模型的内部…...
