首页 > 其他分享 >OpenCV||超细节的基本操作

OpenCV||超细节的基本操作

时间:2024-08-03 11:27:43浏览次数:16  
标签:img image cv2 OpenCV 细节 图像 基本操作 EVENT 左键

一、图像读取

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'):
        break
    elif 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||超详细的几何变换

标签:img,image,cv2,OpenCV,细节,图像,基本操作,EVENT,左键
From: https://blog.csdn.net/m0_56230886/article/details/140798707

相关文章

  • OpenCV||超详细的图像平滑
    消除噪声的工作称为图像平滑平滑处理算法:基于二维离散卷积的高斯平滑、均值平滑;基于统计学方法的中值平滑;具备保持边缘作用的双边滤波、导向滤波。平滑滤波算法:线性平滑、非线性平滑、自适应平滑一、线性滤波1.1归一化方框滤波器概述:归一化方框滤波器,也被称为均值滤波......
  • Hadoop:java使用HDFS API实现基本操作工具类
    1、引入库<dependency><groupId>org.apache.hadoop</groupId><artifactId>hadoop-common</artifactId><version>3.1.0</version></dependency><dependency><groupId>org.apache.hadoop</......
  • 如何在python中通过requests和opencv加载uint16 png文件
    我正在尝试从URL自动加载图像,然后将其加载到numpy矩阵。为此,我需要使用requests和opencv库。对于像uint8这样编码的标准图像,它以正确的方式工作,并且由于值溢出而损坏了uint16图像。这是我现在正在使用的一个简单的最小代码:importrequestsimportcv2importnumpy......
  • nmap 基本操作
    网络扫描神器:Nmap保姆级教程(附链接)_虚拟机怎么安装nmap-CSDN博客NMAP参数_nmap--excludefile-CSDN博客kali就用微软的WSL2版本,在微软商店里安装,然后在终端/Terminal的下拉列表打开就可以了我一般使用,就是看一个网段那个ip被占用以及某个ip有哪些端口开启了#只扫描存活主机......
  • opencv源码编译
    编译环境:ubuntu24.04LTSgcc(Ubuntu13.2.0-23ubuntu4)13.2.0g++(Ubuntu13.2.0-23ubuntu4)13.2.0cmakeversion3.28.3 在Ubuntu下编译OpenCV源码是一个相对直接的过程,但需要注意一些依赖项和配置选项。以下是一个基本的步骤指南,用于从源代码编译OpenCV。1.安装必要......
  • JVM—垃圾收集算法和HotSpot算法实现细节
    1、分代回收策略分代的垃圾回收策略,是基于这样一个事实:不同的对象的生命周期是不一样的。因此,不同生命周期的对象可以采取不同的收集方式,以便提高回收效率。分代垃圾回收采用分治的思想,进行代的划分,把不同生命周期放在不同代上,不同代采用最适合它的垃圾回收方法进行回收。......
  • 【全网独家】OpenCV 图像特征检测与描述(Harris 角点检测、Shi-Tomasi 角点检测、SIFT
    OpenCV图像特征检测与描述在图像处理和计算机视觉中,特征检测和描述是非常重要的任务。本文将介绍几种常用的特征检测和描述方法:Harris角点检测、Shi-Tomasi角点检测、SIFT和SURF。目录介绍应用使用场景原理解释算法原理流程图及解释应用场景代码示例实现部署......
  • 唠唠量化策略开发当中的细节优化,十年多赚200%
    最近这段时间没有搂到啥有趣的量化策略,又不想开空窗,周末闲暇,就来唠唠如何把现有的策略做得更精细化,处理好一些开发细节,让原来的策略更亮眼,无需高深的数据处理和开发技巧,十年多赚200%+。大道理就不瞎扯了,说多了大伙儿也不爱听,我自己是喜欢比较实操更接地气的东西,就拿之前开发......
  • 使用 opencv 进行微米级精度的视觉测量
    当然,这是您的论坛条目的改进版本:我正在开发一个项目,需要拍摄六边形的精确照片并测量其边的宽度。测量必须非常精确,公差约为100微米,这意味着系统的不确定性应该小于此值。目前,我使用48MP手机摄像头来捕获图像,并使用OpenCV2的HoughLines方法来检测六边形的边缘。虽......
  • OPenCV高级编程——OpenCV常见的API及绘图知识详解
    目录引言一、Mat类详解1.Mat类的基本结构2.Mat类的数据类型3.Mat类的创建与初始化4.Mat类的使用技巧二、OpenCV核心功能模块1.基本的图像读取与显示2.图像的保存3.矩阵操作4.等待键盘输入与销毁窗口5.命名窗口三、图像处理模块1.色彩空间转换2.图像......