当前位置: 首页 > news >正文

OpenCV||超细节的基本操作

一、图像读取

retval = cv2.imread(filename[, flags])
  • filename:需要读取的图片路径名,支持多种图片格式,如JPEG、PNG、TIFF等。
  • flags:一个可选参数,指定加载图像的颜色类型。常用的值包括:
    • cv2.IMGEAD_ANYDEPTH:其值是2。若载入的图像深度为16位或32位,就返回对应深度的图像,否则转换为8位图像再返回。
    • cv2.IMREAD_COLOR:其值取1。以彩色模式加载图像,这是默认值。任何图像的透明度都会被忽略(这是默认标志)。
    • cv2.IMREAD_GRAYSCALE:其值取0。以灰度模式加载图像。
    • cv2.IMREAD_UNCHANGED:其值取-1。不加改变的载入原图,包括alpha通道。

注意事项:

1、imread文件路径除了不支持单右斜线形式(\),其他斜线形式都支持

2、imread文件路径不支持中文路径,如果要自持中文路径,可使用以下代码:

img = cv2.imdecode(np.fromfile(imgpath, dtype=np.unit8), -1)

二、 图像属性

  • img.shape[0]读取图像行数
  • img.shape[1]读取图像列数
  • img.shape[2]读取图像通道数
  • img.shape[:2]只读取图像行数和列数

三、图像保存

cv2.imwrite(filename, img[, params])
  1. filename
    • 类型:字符串
    • 说明:要保存的图像文件名,包括文件路径和文件扩展名(如 .jpg.png 等)。文件路径可以是相对路径或绝对路径。文件扩展名决定了保存的图像格式。
    • 注意:在 Python 3 中,cv2.imwrite() 不支持中文和空格作为文件名(直接使用时可能会遇到问题),如果需要使用中文或特殊字符,可以考虑对文件名进行编码处理或使用其他库(如 imageio)来保存图像。
  2. img
    • 类型:通常是一个二维或三维的 NumPy 数组,表示图像数据。
    • 说明:要保存的图像数据。这个数组可以是灰度图像(二维数组)或彩色图像(三维数组,通常具有三个颜色通道,如 RGB 或 BGR)。
  3. params(可选):
    • 类型:可选参数,通常是一个包含键值对的字典,用于指定保存图像时的特定参数。
    • 说明:
      • 压缩质量:对于某些格式(如 JPEG),可以指定压缩质量。例如,使用 cv2.IMWRITE_JPEG_QUALITY 作为键,后跟一个整数值(范围从 0 到 100)作为压缩质量。
      • 压缩级别:对于 PNG 格式,可以指定压缩级别(从 0 到 9)。例如,使用 cv2.IMWRITE_PNG_COMPRESSION 作为键,后跟一个整数值作为压缩级别。
      • 其他参数:根据 OpenCV 的不同版本和支持的格式,可能还有其他可用的参数。具体参数列表和用法应参考 OpenCV 的官方文档。

四、图像显示

def cv_show(name, img):cv2.imshow(name, img)cv2.waitKey(0)cv2.destroyAllWindows()

五、单窗口多图像显示

image = cv2.imread('img\\1.png')
cv_show("img", image)
image_cut1 = image[0:500, 0:500]
image_cut2 = image[500:1000, 500:1000]
hstack_image = np.hstack([image_cut1, image_cut2])
cv_show("hstack_image", hstack_image)
  • 使用np.hstack()函数拼接图像,使用时图像的形状要一致。此时图像水平拼接。
  • 使用np.vstack()函数图像会竖直拼接。

六、鼠标事件(了解)

img = np.full((500, 500), 0)
img = cv2.convertScaleAbs(img)def draw_circle(event, x, y, flags, param):if event == cv2.EVENT_LBUTTONDOWN:cv2.circle(img, (x, y), 50, (255, 255, 255), -1)cv2.namedWindow('img')
cv2.setMouseCallback('img', draw_circle)
while 1:cv2.imshow('img', img)n = cv2.waitKey(5)if n == ord('q'):breakelif n == ord('s'):cv2.imwrite('res.jpg', img)print('保存成功')
cv2.destroyAllWindows()

 鼠标事件event有以下:

  1. 鼠标移动(EVENT_MOUSEMOVE):当鼠标在窗口内移动时触发。
  2. 左键按下(EVENT_LBUTTONDOWN):当鼠标左键被按下时触发。
  3. 左键释放(EVENT_LBUTTONUP):当鼠标左键被释放时触发。
  4. 左键双击(EVENT_LBUTTONDBLCLK):当鼠标左键被快速双击时触发。
  5. 右键按下(EVENT_RBUTTONDOWN)右键释放(EVENT_RBUTTONUP)右键双击(EVENT_RBUTTONDBLCLK):与左键类似,但对应的是鼠标右键。
  6. 中键按下(EVENT_MBUTTONDOWN)中键释放(EVENT_MBUTTONUP)中键双击(EVENT_MBUTTONDBLCLK):与左键和右键类似,但对应的是鼠标中键(如果有的话)。
  7. 滚轮滑动(EVENT_MOUSEWHEEL、EVENT_MOUSEHWHEEL):当鼠标滚轮被滚动时触发,EVENT_MOUSEWHEEL对应垂直滚动,EVENT_MOUSEHWHEEL对应水平滚动。

 鼠标事件标志flags有以下:

Flags常量含义
cv2.EVENT_FLAG_LBUTTON左键被按下或拖拽时设置
cv2.EVENT_FLAG_RBUTTON右键被按下或拖拽时设置
cv2.EVENT_FLAG_MBUTTON中键(滚轮按钮)被按下或拖拽时设置
cv2.EVENT_FLAG_CTRLKEYCtrl键被按下时设置
cv2.EVENT_FLAG_SHIFTKEYShift键被按下时设置
cv2.EVENT_FLAG_ALTKEYAlt键被按下时设置

 七、滑动条事件(不做讲解)

链接跳转:

章节二、OpenCV||超简略的Numpy小tip

章节三、OpenCV||超详细的图像处理模块

章节四、OpenCV||超详细的灰度变换和直方图修正

章节五、OpenCV||超详细的图像平滑

章节六、OpenCV||超详细的几何变换

相关文章:

OpenCV||超细节的基本操作

一、图像读取 retval cv2.imread(filename[, flags]) filename:需要读取的图片路径名,支持多种图片格式,如JPEG、PNG、TIFF等。flags:一个可选参数,指定加载图像的颜色类型。常用的值包括: cv2.IMGEAD_A…...

算法训练(leetcode)第三十八天 | 1143. 最长公共子序列、1035. 不相交的线、53. 最大子数组和、392. 判断子序列

刷题记录 *1143. 最长公共子序列1035. 不相交的线53. 最大子数组和392. 判断子序列 *1143. 最长公共子序列 leetcode题目地址 本题和718. 最长重复子数组相似,只是本题不要求连续,需要记录前面最长的子序列,在此基础上累计长度。 dp[i][j]…...

STM32——外部中断(EXTI)

目录 前言 一、外部中断基础知识 二、使用步骤 三、固件库实现 四、STM32CubeMX实现 总结 前言 外部中断(External Interrupt,简称EXTI)是微控制器用于响应外部事件的一种方式,当外部事件发生时(如按键按下、传感器信号…...

MySQL多实例部署

1、软件包下载 //环境:一台rocky Linux虚拟机,并且做好的基本配置及时钟同步,使用Xshell连接 [rootmysql ~]# yum -y install tar lrzsz libncurses* libaio perl//将包文件拖进去 [rootmysql ~]# rz -E rz waiting to receive. [rootmysql…...

云开发喝酒小程序3.6全新漂亮UI猜拳喝酒小程序 【已去除流量主】

云开发喝酒小程序3.6全新漂亮UI猜拳喝酒小程序 已去除流量主。UI特别漂亮,实属精品代码。 【已测】云开发喝酒小程序3.6漂亮UI猜拳喝酒小程序 已去除流量主。 云开发(serverless)小程序无需服务器,注册一个小程序就可以直接上线…...

图论进阶之路-最短路(Floyd)

时间复杂度:O(n^3) 使用场景:当需要得知任意两个点的最短距离以及其路径时使用 准备:需要两个矩阵 一个记录最短距离(D) 一个记录最短路径的最后一个结点(P) 其核心在于不断的判断越过中间…...

安装sqllab靶机之后,练习关卡报403 forbidden

解决办法: 在nginx的conf文件中添加上访问index.php vim /usr/local/nginx/conf/nginx.conf 保存退出 再重启一下nginx,就完成了。 ./nginx -s reload...

微信VX多开 免扫码 登录 互斥体 可视化 Exui v1.1 易语言源码附成品软件

UI设计: 1. EXUI界面库20240204 调用的模块: 1. wow64_hook_3.02.ec(压缩包内含) 2. 精易模块[v11.1.0].ec(自行下载) 更新日志: v1.1 2024年7月25日13:28:43 { 1. 有人反馈 设置了V…...

JavaEE 从入门到精通(一) ~ Maven

晚上好,愿这深深的夜色给你带来安宁,让温馨的夜晚抚平你一天的疲惫,美好的梦想在这个寂静的夜晚悄悄成长。 目录 前言 1.1 概念 什么是 Maven? Maven 的核心概念 1.2 maven依赖坐标 1.3 maven仓库 1.4 maven安装 1.5 mave…...

滚珠丝杆与丝杆支撑座:稳定性与精度的双重保障

丝杆支撑座是连接滚珠丝杆与电机的轴承,采用优质的轴承能确保支撑座与滚珠丝杆之间的刚性平衡。那么,滚珠丝杆搭连接杆支撑座有哪些优缺点呢? 正常情况下,丝杆支撑座能够提供稳定的支撑力,确保滚珠丝杆在复杂工况下保持…...

实验5-11 空心的数字金字塔

本题要求实现一个函数,输出n行空心的数字金字塔。 函数接口定义: void hollowPyramid( int n );其中n是用户传入的参数,为[1, 9]的正整数。要求函数按照如样例所示的格式打印出n行空心的数字金字塔,请注意,最后一行的…...

C#对象和类型

属性、方法、字段 字段和属性的区别 在C#中,字段(fields)和属性(properties)都是类的成员,它们提供了类存储数据的方式,但它们在用途和功能上有着明显的区别。 字段 字段通常用来存储类…...

免费分享一套SpringBoot+Vue图书(图书借阅)管理系统【论文+源码+SQL脚本】,帅呆了~~

大家好,我是java1234_小锋老师,看到一个不错的SpringBootVue图书(图书借阅)管理系统,分享下哈。 项目视频演示 【免费】SpringBootVue图书(图书借阅)管理系统 Java毕业设计_哔哩哔哩_bilibili 项目介绍 本论文阐述了一套先进的图书管理系…...

数据结构与算法--队列

文章目录 提要队列的定义队列的认识队列的应用队列的抽象数据类型队列的存储结构队列的链式存储结构与实现链队的进队和出队操作链队的数据类型初始化链队列入队操作出队操作队列的顺序存储结构与实现顺序队列的假溢出问题队列上溢循环队列循环队列取下一相邻单元下标运算队满与…...

<Qt> 常用控件

目录 一、控件概述 二、QWidget 核心属性 (一)QWidget的核心属性概览 1. enabled 2. geometry 3. WindowFrame的影响 4. windowTitle 5. window Icon 6. windowOpacity 7. cursor 8. font 9. toolTip 10. focusPolicy 11. styleSheet 三、…...

关于C/C++的编译、构建、CMake、x86_amd64等问题(自用)

被这些玩意整红温了 编译器版本 x86:编译器为x86版本,输出文件为x86。amd64_x86:编译器为amd64版本,输出文件为x86。amd64:编译器为amd64版本,输出文件为amd64。x86_amd64:编译器为x86版本&am…...

【设计模式】工厂模式详解

1.简介 工厂模式是一种创建型设计模式,通过提供一个接口或抽象类来创建对象,而不是直接实例化对象。工厂模式的主要思想是将对象的创建与使用分离,使得创建对象的过程更加灵活和可扩展。 工厂模式主要包括以下角色: 抽象工厂&a…...

【Spring Boot】用 Spring Security 实现后台登录及权限认证功能

用 Spring Security 实现后台登录及权限认证功能 1.引入依赖2.创建权限开放的页面3.创建需要权限验证的页面4.配置 Spring Security4.1 配置 Spring MVC4.2 配置 Spring Security 5.创建登录页面6.测试权限 1.引入依赖 使用前需要引入相关依赖,见以下代码&#xff…...

PHP开发【石头剪刀布小游戏】

石头剪刀布小游戏 玩法超级简单,你只需要在下面选择石头、剪刀或者布,然后提交,系统就会随机生成电脑的选择,告诉你最终的结果哦! 游戏规则: 如果你的选择和电脑一样,那么就是平局。如果你赢…...

(leetcode学习)42. 接雨水

给定 n 个非负整数表示每个宽度为 1 的柱子的高度图,计算按此排列的柱子,下雨之后能接多少雨水。 示例 1: 输入:height [0,1,0,2,1,0,1,3,2,1,2,1] 输出:6 解释:上面是由数组 [0,1,0,2,1,0,1,3,2,1,2,1] 表…...

后进先出(LIFO)详解

LIFO 是 Last In, First Out 的缩写,中文译为后进先出。这是一种数据结构的工作原则,类似于一摞盘子或一叠书本: 最后放进去的元素最先出来 -想象往筒状容器里放盘子: (1)你放进的最后一个盘子&#xff08…...

vscode里如何用git

打开vs终端执行如下: 1 初始化 Git 仓库(如果尚未初始化) git init 2 添加文件到 Git 仓库 git add . 3 使用 git commit 命令来提交你的更改。确保在提交时加上一个有用的消息。 git commit -m "备注信息" 4 …...

Zustand 状态管理库:极简而强大的解决方案

Zustand 是一个轻量级、快速和可扩展的状态管理库,特别适合 React 应用。它以简洁的 API 和高效的性能解决了 Redux 等状态管理方案中的繁琐问题。 核心优势对比 基本使用指南 1. 创建 Store // store.js import create from zustandconst useStore create((set)…...

相机Camera日志实例分析之二:相机Camx【专业模式开启直方图拍照】单帧流程日志详解

【关注我,后续持续新增专题博文,谢谢!!!】 上一篇我们讲了: 这一篇我们开始讲: 目录 一、场景操作步骤 二、日志基础关键字分级如下 三、场景日志如下: 一、场景操作步骤 操作步…...

pam_env.so模块配置解析

在PAM(Pluggable Authentication Modules)配置中, /etc/pam.d/su 文件相关配置含义如下: 配置解析 auth required pam_env.so1. 字段分解 字段值说明模块类型auth认证类模块,负责验证用户身份&am…...

【论文笔记】若干矿井粉尘检测算法概述

总的来说,传统机器学习、传统机器学习与深度学习的结合、LSTM等算法所需要的数据集来源于矿井传感器测量的粉尘浓度,通过建立回归模型来预测未来矿井的粉尘浓度。传统机器学习算法性能易受数据中极端值的影响。YOLO等计算机视觉算法所需要的数据集来源于…...

反射获取方法和属性

Java反射获取方法 在Java中,反射(Reflection)是一种强大的机制,允许程序在运行时访问和操作类的内部属性和方法。通过反射,可以动态地创建对象、调用方法、改变属性值,这在很多Java框架中如Spring和Hiberna…...

【VLNs篇】07:NavRL—在动态环境中学习安全飞行

项目内容论文标题NavRL: 在动态环境中学习安全飞行 (NavRL: Learning Safe Flight in Dynamic Environments)核心问题解决无人机在包含静态和动态障碍物的复杂环境中进行安全、高效自主导航的挑战,克服传统方法和现有强化学习方法的局限性。核心算法基于近端策略优化…...

Linux nano命令的基本使用

参考资料 GNU nanoを使いこなすnano基础 目录 一. 简介二. 文件打开2.1 普通方式打开文件2.2 只读方式打开文件 三. 文件查看3.1 打开文件时,显示行号3.2 翻页查看 四. 文件编辑4.1 Ctrl K 复制 和 Ctrl U 粘贴4.2 Alt/Esc U 撤回 五. 文件保存与退出5.1 Ctrl …...

HybridVLA——让单一LLM同时具备扩散和自回归动作预测能力:训练时既扩散也回归,但推理时则扩散

前言 如上一篇文章《dexcap升级版之DexWild》中的前言部分所说,在叠衣服的过程中,我会带着团队对比各种模型、方法、策略,毕竟针对各个场景始终寻找更优的解决方案,是我个人和我司「七月在线」的职责之一 且个人认为&#xff0c…...