当前位置: 首页 > 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] 表…...

业务系统对接大模型的基础方案:架构设计与关键步骤

业务系统对接大模型:架构设计与关键步骤 在当今数字化转型的浪潮中,大语言模型(LLM)已成为企业提升业务效率和创新能力的关键技术之一。将大模型集成到业务系统中,不仅可以优化用户体验,还能为业务决策提供…...

Vue记事本应用实现教程

文章目录 1. 项目介绍2. 开发环境准备3. 设计应用界面4. 创建Vue实例和数据模型5. 实现记事本功能5.1 添加新记事项5.2 删除记事项5.3 清空所有记事 6. 添加样式7. 功能扩展:显示创建时间8. 功能扩展:记事项搜索9. 完整代码10. Vue知识点解析10.1 数据绑…...

使用VSCode开发Django指南

使用VSCode开发Django指南 一、概述 Django 是一个高级 Python 框架,专为快速、安全和可扩展的 Web 开发而设计。Django 包含对 URL 路由、页面模板和数据处理的丰富支持。 本文将创建一个简单的 Django 应用,其中包含三个使用通用基本模板的页面。在此…...

安宝特方案丨XRSOP人员作业标准化管理平台:AR智慧点检验收套件

在选煤厂、化工厂、钢铁厂等过程生产型企业,其生产设备的运行效率和非计划停机对工业制造效益有较大影响。 随着企业自动化和智能化建设的推进,需提前预防假检、错检、漏检,推动智慧生产运维系统数据的流动和现场赋能应用。同时,…...

【网络安全产品大调研系列】2. 体验漏洞扫描

前言 2023 年漏洞扫描服务市场规模预计为 3.06(十亿美元)。漏洞扫描服务市场行业预计将从 2024 年的 3.48(十亿美元)增长到 2032 年的 9.54(十亿美元)。预测期内漏洞扫描服务市场 CAGR(增长率&…...

spring:实例工厂方法获取bean

spring处理使用静态工厂方法获取bean实例,也可以通过实例工厂方法获取bean实例。 实例工厂方法步骤如下: 定义实例工厂类(Java代码),定义实例工厂(xml),定义调用实例工厂&#xff…...

【2025年】解决Burpsuite抓不到https包的问题

环境:windows11 burpsuite:2025.5 在抓取https网站时,burpsuite抓取不到https数据包,只显示: 解决该问题只需如下三个步骤: 1、浏览器中访问 http://burp 2、下载 CA certificate 证书 3、在设置--隐私与安全--…...

高危文件识别的常用算法:原理、应用与企业场景

高危文件识别的常用算法:原理、应用与企业场景 高危文件识别旨在检测可能导致安全威胁的文件,如包含恶意代码、敏感数据或欺诈内容的文档,在企业协同办公环境中(如Teams、Google Workspace)尤为重要。结合大模型技术&…...

今日学习:Spring线程池|并发修改异常|链路丢失|登录续期|VIP过期策略|数值类缓存

文章目录 优雅版线程池ThreadPoolTaskExecutor和ThreadPoolTaskExecutor的装饰器并发修改异常并发修改异常简介实现机制设计原因及意义 使用线程池造成的链路丢失问题线程池导致的链路丢失问题发生原因 常见解决方法更好的解决方法设计精妙之处 登录续期登录续期常见实现方式特…...

基于matlab策略迭代和值迭代法的动态规划

经典的基于策略迭代和值迭代法的动态规划matlab代码,实现机器人的最优运输 Dynamic-Programming-master/Environment.pdf , 104724 Dynamic-Programming-master/README.md , 506 Dynamic-Programming-master/generalizedPolicyIteration.m , 1970 Dynamic-Programm…...