计算机视觉——opencv快速入门(二) 图像的基本操作

前言

上一篇文章中我们介绍了如何配置opencv,而在这篇文章我们主要介绍的是如何使用opencv来是实现一些常见的图像操作。

图像的读取,显示与存储

读取图像文件

在opencv中我们利用imread函数来读取图像文件,函数语法如下:

python 复制代码
image=cv2.imread(path,flag)

参数说明:

  • image:返回来的所读取的对象,如果读取失败,返回None.
  • path:图像路径
  • flag:可选参数,又可叫图像旗标,用来说明图像读取的格式,省略则按照默认图像格式来读取。

下面我们来看一个简单的示例:

python 复制代码
import cv2

cv2.namedWindow("image", cv2.WINDOW_NORMAL)
img = cv2.imread(r'C:\\Users\\fengxu\Desktop\\Screenshots\\1b8fc10d60dbe62d15237451f13408a1.jpg')
cv2.resizeWindow("image", 600,400)
cv2.imshow("image", img)

# 等待按键后关闭窗口,否则imshow的窗口会立即消失
cv2.waitKey(0)
cv2.destroyAllWindows()

这就是一个非常简单的加载图像的代码了。

图像的显示与图像窗口的关闭

基于opencv实现图像的显示

在opencv中我们可以基于cv.imshow()函数将读取的图像对象显示在opencv窗口上,函数定义如下:

python 复制代码
cv2.imshow(window_name,image)

参数说明:

  • window_name:要显示窗口的标题
  • image:要显示的图像对象

示例代码:

python 复制代码
import cv2

# 创建一个可调整大小的窗口
cv2.namedWindow("image", cv2.WINDOW_NORMAL)

# 读取图像文件
img = cv2.imread(r'./source/a.png')

# 检查图像是否成功读取
if img is None:
    print("无法读取图像文件,请检查路径是否正确。")
else:
    # 显示图像
    cv2.imshow("image", img)
    cv2.waitKey(0)  # 等待按键输入,参数为0表示无限等待,直到按下任意键
    cv2.destroyAllWindows()  # 关闭所有OpenCV窗口

运行结果:

如何关闭opencv窗口

当我们将图片显示在opencv窗口后,除了点击关闭按钮关闭,还可以使用下列函数:

python 复制代码
cv2.destoryWindow(window_name);  # 删除指定窗口
cv2.destoryAllWindows();		# 删除所有窗口

控制按键事件

opencv可以通过cv2.waitkey()函数来等待按键事件,函数语法如下:

python 复制代码
ret_key=cv2.waitkey(delay);

参数说明:

  • ret_key:如果没有按下键盘上的值,返回值是-1,否则是按键对应的ASCII值
  • delay:单位为毫秒

示例:

  • 5秒后关闭:
python 复制代码
import cv2

# 创建一个可调整大小的窗口
cv2.namedWindow("image", cv2.WINDOW_NORMAL)

# 读取图像文件
img = cv2.imread(r'./source/a.png')

# 检查图像是否成功读取
if img is None:
    print("无法读取图像文件,请检查路径是否正确。")
else:
    # 显示图像
    cv2.imshow("image", img)
    cv2.waitKey(10000)  # 等待10秒
    cv2.destroyAllWindows()  # 关闭所有OpenCV窗口
  • 按q键退出
python 复制代码
import cv2

# 创建一个可调整大小的窗口
cv2.namedWindow("image", cv2.WINDOW_NORMAL)

# 读取图像文件
img = cv2.imread(r'./source/a.png')

# 检查图像是否成功读取
if img is None:
    print("无法读取图像文件,请检查路径是否正确。")
else:
    # 显示图像
    cv2.imshow("image", img)
    ret_key=cv2.waitKey(0)  
    if ret_key == ord('q'):   # # 如果按下q键,则退出
        cv2.destroyAllWindows()  # 关闭所有OpenCV窗口

调整图像窗口的大小

我们在使用imshow函数创建窗口显示图像时,窗口的大小是固定,但是我们可以通过namedWindow()函数建立未来要显示图像的窗口。

python 复制代码
cv2.namedWindow(window_name,flag)
  • flag:窗口旗标参数,类型有:

    • cv2.WINDOW_NORMAL:用户可以自行调整窗口
    • cv2.WINDOW_AUTOSIZE:自动调整大小
    • cv2.WINDOW_OPENGL:支持以OPENGL的方式打开窗口

图像的存储

在opencv中我们可以使用imwrite函数存储图像,函数声明如下:

python 复制代码
ret=cv2.imwrite(path,image)

成功返回True,失败返回False

示例代码:

python 复制代码
import cv2

# 创建一个可调整大小的窗口
cv2.namedWindow("image", cv2.WINDOW_NORMAL)

# 读取图像文件
img = cv2.imread(r'./source/a.png')

# 检查图像是否成功读取
if img is None:
    print("无法读取图像文件,请检查路径是否正确。")

ret=cv2.imwrite("./source/output.png", img)
if ret:
    print("图像保存成功。")
else:
    print("图像保存失败。")

cv2.waitKey(0)

运行后我们发现source文件夹下出现了我想要保存的结果

课后练习

选择一张图片,分别以灰色与彩色两种方式读取,同时以_color后缀存储彩色图片,_gray存储灰色照片

python 复制代码
# 彩色
import cv2

# 创建一个可调整大小的窗口
cv2.namedWindow("image1", cv2.WINDOW_NORMAL)

# 读取图像文件
img1 = cv2.imread(r'./source/a.png')
cv2.imshow("image1", img1)
cv2.waitKey(0)


# 检查图像是否成功读取
if img1 is None:
    print("无法读取图像文件,请检查路径是否正确。")

ret=cv2.imwrite("./source/a_color.png", img1)
if ret:
    print("图像保存成功。")
else:
    print("图像保存失败。")
python 复制代码
# 灰色
import cv2

# 创建一个可调整大小的窗口
cv2.namedWindow("image2", cv2.WINDOW_NORMAL)

# 读取图像文件
img2 = cv2.imread(r'./source/a.png', cv2.IMREAD_GRAYSCALE)
cv2.imshow("image2", img2)
cv2.waitKey(0)


# 检查图像是否成功读取
if img2 is None:
    print("无法读取图像文件,请检查路径是否正确。")

ret=cv2.imwrite("./source/a_gray.png", img2)
if ret:
    print("图像保存成功。")
else:
    print("图像保存失败。")
相关推荐
土星云SaturnCloud6 分钟前
抽水蓄能设备智慧运营:基于土星云边缘计算实现机组全生命周期预测性维护
服务器·人工智能·ai·边缘计算
江畔柳前堤7 分钟前
系统的本质——从LTI系统到神经网络
人工智能·深度学习·神经网络·机器学习·计算机视觉·数据挖掘·语音识别
HackTwoHub21 分钟前
轻量化AI渗透武器库|ARTEX自主攻防系统、资产梳理、漏洞挖掘、链路分析全流程智能化落地
人工智能·安全·web安全·网络安全·系统安全·网络攻击模型·安全架构
中电金信32 分钟前
WAIC 2026媒体聚焦:中电金信的AI工程化思考与实践
人工智能
冬奇Lab1 小时前
码库知识库系列(03):代码 Embedding 策略——原始代码反而比注释增强更好
人工智能
冬奇Lab1 小时前
开源项目第172期:agentOS — 以库的形式给 AI Agent 一个操作系统,冷启动 92x 更快、内存 47x 更少
人工智能·开源·agent
大橙子打游戏1 小时前
make-goal:把长期 AI 任务从聊天记录里解放出来
人工智能
华盈生物1 小时前
AI+病理:从切片到数据,空间多模态解析肿瘤微环境
人工智能·单细胞测序·空间单细胞蛋白组·单细胞组织原位空间蛋白组学·组织原位空间蛋白组学·超多重蛋白成像·ai+病理
IT_陈寒2 小时前
Vite热更新失效?你可能漏了这个配置
前端·人工智能·后端
禹亮科技2 小时前
制造业100㎡跨国技术评审会议室音视频整体解决方案(亿联+思必驰+讯飞AI落地实践)
人工智能·音视频·视频会议系统集成