小白学OpenCV系列1-图像处理基本操作

发布于:2025-07-30 ⋅ 阅读:(25) ⋅ 点赞:(0)

由于工作需要,需要用到图像方面的知识技能,虽然在学校的时候学习过CS231N,但主要是深度学习方面,对于基础的图像原理没有做更多的了解。而后的工作中也一直没有接触图像相关的项目,因此此次也正好是个机会重新学习一下,并以此记录下我的学习过程。
既然要做图像相关的项目,怎么能绕开OpenCV呢?它是一个开源的计算机视觉库,最初由英特尔公司在1999年发起并开发,目的是为计算机视觉应用提供一套通用的基础工具。它功能很强大,几乎涵盖了计算机视觉的各个领域,同时可以在多种操作系统上运行,其核心代码使用 C/C++ 编写,但也提供了完善的Python接口(cv2模块),几乎成为了Python社区进行计算机视觉开发的首选库。

OpenCV安装

在Python环境下安装OpenCV非常简单,只需要运行以下命令即可:

pip install opencv-python

在这里插入图片描述
当前使用了Python3.9环境,OpenCV版本是4.12.0.88,安装完成后,导入cv2模块就可以用起来了。

图像处理基本操作

读取图像

在opencv里,可以使用imread函数来读取图像:

import cv2
retval = cv2.imread(file_name[, flags])
  • retval是返回值,正常的话就是读取到的图像,如果未读取到,则返回None。
  • file_name就是要读取的图像名。
  • flags是控制读取文件的类型,具体的取值和含义如下所示:

在这里插入图片描述在这里插入图片描述

显示图像

1、创建窗口
我们可以用下列函数来创建指定名称的窗口:

None = cv2.namedWindow(win_name)
  • win_name是要创建的窗口的名称。

2、显示图像

None = cv2.imshow(win_name, image)
  • win_name是窗口名称。
  • image是图像。

这里的win_name可以是事先创建好的窗口名称(比如使用namedWindow创建的),也可以是一个不存在的窗口名称(该函数就会自动创建指定该名称的窗口)

按键等待

有时候我们需要让屏幕一直显示该窗口,因此需要用到下列函数:

retval = cv2.waitKey([delay])
  • retval表示返回值。如果没有按键被按下,则返回-1;如果有按键被按下,则返回该按键的ASCII值。
  • delay表示等待键盘触发的事件,单位是ms。当该值是负数或者零时,表示无限等待。该值默认为0。

如果不使用该函数,图像就会一闪即逝,不会一直显示。

销毁窗口

1、销毁指定窗口
我们可以用以下函数来销毁指定的窗口:

None = cv2.destroyWindow(win_name)
  • win_name时窗口的名称

实际上该函数通常与cv2.waitKey()组合实现窗口的释放。
2、销毁所有窗口
有时候我们可能不止生成一个窗口,那么使用上个方法难免太麻烦了,因此可以使用下列函数,可以一次性销毁所有创建的窗口:

None = cv2.destroyAllWindows()

保存图像

当我们需要保存图像时,可以使用下列函数:

retval=cv2.imwrite(filename,img[,params])
  • retval是返回值。如果保存成功,则返回逻辑值真,如果保存不成功,则返回逻辑值假。
  • filename是要保存的文件完整路径名,包括扩展名。
  • img是被保存的图像。
  • params是保存类型参数,针对不同格式的图像,有很多选择,比如对于JPEG格式(后缀名为.jpg,.jpeg)的图像来说,有以下选项:
参数名 含义 默认值 取值范围 说明
cv2.IMWRITE_JPEG_QUALITY 设置JPEG的压缩质量 95 0-100 值越高图像质量越好,值越低压缩率越高
cv2.IMWRITE_JPEG_PROGRESSIVE 启用/禁用渐进式 JPEG 0 0是禁用,1是启用 渐进式 JPEG 在加载时从模糊到清晰逐步显示,适合网络传输
cv2.IMWRITE_JPEG_OPTIMIZE 启用霍夫曼表优化 0 0是禁用,1是启用 通过优化霍夫曼编码表减小文件大小(不影响图像质量)
cv2.IMWRITE_JPEG_RST_INTERVAL 设置 JPEG 重启间隔 0 0-65535 设置重启间隔可增强错误恢复能力,适合不可靠传输环境
cv2.IMWRITE_JPEG_LUMA_QUALITY 单独设置亮度(Y 通道)质量 0 0-100 需与 cv2.IMWRITE_JPEG_CHROMA_QUALITY 配合使用
cv2.IMWRITE_JPEG_CHROMA_QUALITY 单独设置色度(Cb/Cr 通道)质量 0 0-100 人眼对色度变化不敏感,降低此值可显著减小文件大小

我们以下列图片来举例部分选项的使用:
在这里插入图片描述

import cv2
import os


image_path = os.path.abspath(r"fruits.jpg")
raw_save_path = r"fruit_raw.jpg"
huff_save_path = r"fruit_huff.jpg"
chroma_save_path = r"fruit_chroma.jpg"

fruit_image = cv2.imread(image_path)
cv2.imshow("fruit", fruit_image)

cv2.waitKey()
# 高质量保存
cv2.imwrite(raw_save_path, fruit_image, [cv2.IMWRITE_JPEG_QUALITY, 100])
# 霍夫曼优化保存
cv2.imwrite(huff_save_path, fruit_image, [cv2.IMWRITE_JPEG_OPTIMIZE, 1])
# 低色度保存
cv2.imwrite(chroma_save_path, fruit_image, [cv2.IMWRITE_JPEG_LUMA_QUALITY, 100, cv2.IMWRITE_JPEG_CHROMA_QUALITY, 50])
cv2.destroyAllWindows()

cv2.IMWRITE_JPEG_QUALITY的保存效果如下:
在这里插入图片描述cv2.IMWRITE_JPEG_OPTIMIZE的保存效果如下:
在这里插入图片描述
cv2.IMWRITE_JPEG_LUMA_QUALITY和cv2.IMWRITE_JPEG_CHROMA_QUALITY的保存效果如下:
在这里插入图片描述
实际上看上去没有太大的差别,但是各自存储的大小还是有所差异的。

高质量 霍夫曼优化 低色度
161kb 82.1kb 117kb

使用另外两种方法保存,占用的存储空间小很多。

总结

本篇文章主要介绍了Python环境中OpenCV模块的安装,以及几个简单方法的使用:

  • cv2.imread:读取图像
  • cv2.namedWindow:创建窗口
  • cv2.imshow:显示图像
  • cv2.waitKey:等待按键输入
  • cv2.destroyWindow:销毁指定名字的窗口
  • cv2.destroyAllWindows:销毁所有创建的窗口
  • cv2.imwrite:保存图像

后续将逐步使用此模块搭建一些实用工具,只有理论和实践相结合才能更深刻地理解背后的奥秘。


网站公告

今日签到

点亮在社区的每一天
去签到