计算机视觉——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库,每…...

JavaSec-RCE
简介 RCE(Remote Code Execution),可以分为:命令注入(Command Injection)、代码注入(Code Injection) 代码注入 1.漏洞场景:Groovy代码注入 Groovy是一种基于JVM的动态语言,语法简洁,支持闭包、动态类型和Java互操作性,…...

Cloudflare 从 Nginx 到 Pingora:性能、效率与安全的全面升级
在互联网的快速发展中,高性能、高效率和高安全性的网络服务成为了各大互联网基础设施提供商的核心追求。Cloudflare 作为全球领先的互联网安全和基础设施公司,近期做出了一个重大技术决策:弃用长期使用的 Nginx,转而采用其内部开发…...
高效线程安全的单例模式:Python 中的懒加载与自定义初始化参数
高效线程安全的单例模式:Python 中的懒加载与自定义初始化参数 在软件开发中,单例模式(Singleton Pattern)是一种常见的设计模式,确保一个类仅有一个实例,并提供一个全局访问点。在多线程环境下,实现单例模式时需要注意线程安全问题,以防止多个线程同时创建实例,导致…...
腾讯云V3签名
想要接入腾讯云的Api,必然先按其文档计算出所要求的签名。 之前也调用过腾讯云的接口,但总是卡在签名这一步,最后放弃选择SDK,这次终于自己代码实现。 可能腾讯云翻新了接口文档,现在阅读起来,清晰了很多&…...
从面试角度回答Android中ContentProvider启动原理
Android中ContentProvider原理的面试角度解析,分为已启动和未启动两种场景: 一、ContentProvider已启动的情况 1. 核心流程 触发条件:当其他组件(如Activity、Service)通过ContentR…...

Ubuntu Cursor升级成v1.0
0. 当前版本低 使用当前 Cursor v0.50时 GitHub Copilot Chat 打不开,快捷键也不好用,当看到 Cursor 升级后,还是蛮高兴的 1. 下载 Cursor 下载地址:https://www.cursor.com/cn/downloads 点击下载 Linux (x64) ,…...

CVPR2025重磅突破:AnomalyAny框架实现单样本生成逼真异常数据,破解视觉检测瓶颈!
本文介绍了一种名为AnomalyAny的创新框架,该方法利用Stable Diffusion的强大生成能力,仅需单个正常样本和文本描述,即可生成逼真且多样化的异常样本,有效解决了视觉异常检测中异常样本稀缺的难题,为工业质检、医疗影像…...

Linux部署私有文件管理系统MinIO
最近需要用到一个文件管理服务,但是又不想花钱,所以就想着自己搭建一个,刚好我们用的一个开源框架已经集成了MinIO,所以就选了这个 我这边对文件服务性能要求不是太高,单机版就可以 安装非常简单,几个命令就…...

基于开源AI智能名片链动2 + 1模式S2B2C商城小程序的沉浸式体验营销研究
摘要:在消费市场竞争日益激烈的当下,传统体验营销方式存在诸多局限。本文聚焦开源AI智能名片链动2 1模式S2B2C商城小程序,探讨其在沉浸式体验营销中的应用。通过对比传统品鉴、工厂参观等初级体验方式,分析沉浸式体验的优势与价值…...
ThreadLocal 源码
ThreadLocal 源码 此类提供线程局部变量。这些变量不同于它们的普通对应物,因为每个访问一个线程局部变量的线程(通过其 get 或 set 方法)都有自己独立初始化的变量副本。ThreadLocal 实例通常是类中的私有静态字段,这些类希望将…...