当前位置: 首页 > 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||超详细的几何变换

http://www.lryc.cn/news/414073.html

相关文章:

  • 算法训练(leetcode)第三十八天 | 1143. 最长公共子序列、1035. 不相交的线、53. 最大子数组和、392. 判断子序列
  • STM32——外部中断(EXTI)
  • MySQL多实例部署
  • 云开发喝酒小程序3.6全新漂亮UI猜拳喝酒小程序 【已去除流量主】
  • 图论进阶之路-最短路(Floyd)
  • 安装sqllab靶机之后,练习关卡报403 forbidden
  • 微信VX多开 免扫码 登录 互斥体 可视化 Exui v1.1 易语言源码附成品软件
  • JavaEE 从入门到精通(一) ~ Maven
  • 滚珠丝杆与丝杆支撑座:稳定性与精度的双重保障
  • 实验5-11 空心的数字金字塔
  • C#对象和类型
  • 免费分享一套SpringBoot+Vue图书(图书借阅)管理系统【论文+源码+SQL脚本】,帅呆了~~
  • 数据结构与算法--队列
  • <Qt> 常用控件
  • 关于C/C++的编译、构建、CMake、x86_amd64等问题(自用)
  • 【设计模式】工厂模式详解
  • 【Spring Boot】用 Spring Security 实现后台登录及权限认证功能
  • PHP开发【石头剪刀布小游戏】
  • (leetcode学习)42. 接雨水
  • Python编程实例2
  • 排序算法:堆排序,golang实现
  • 【网络安全入门】学习网络安全必须知道的77个网络基础知识
  • limit 以及分页 SQL 语句
  • mysql8.0规范
  • 现代前端架构介绍(第三部分):深入了解状态管理层及其对前端App的影响
  • NLP与搜广推常见面试问题
  • Python怎么实现协程并发呢?
  • 专治408开始的晚!8月一定要完成这些事!
  • 计算机毕业设计选题推荐-校内跑腿业务系统-Java/Python项目实战
  • Unity命名验证工具类