Python学习笔记第八十天(OpenCV图像操作)

Python学习笔记第八十天

OpenCV图像操作

图像读取与显示

在开始任何图像处理之前,我们需要先读取图像。OpenCV提供了cv2.imread函数用于读取图像。这个函数接受两个参数:图像的路径和读取模式(例如,是否以彩色或灰度模式读取)。

python 复制代码
import cv2
img = cv2.imread('image.jpg')

读取图像后,我们可以使用cv2.imshow函数在窗口中显示图像。cv2.imshow需要两个参数:窗口名称和要显示的图像。此外,cv2.waitKey函数用于等待用户按键,而cv2.destroyAllWindows则用于关闭所有打开的窗口。

python 复制代码
cv2.imshow('Image Window', img)
cv2.waitKey(0)  # 等待用户按键,0表示无限等待
cv2.destroyAllWindows()  # 关闭所有窗口

像素值访问与修改

在OpenCV中,你可以像访问数组一样访问图像的像素值。对于彩色图像,像素值是一个包含三个通道(BGR)值的元组。你可以使用索引来访问特定位置的像素值。

python 复制代码
pixel_value = img[100, 100]  # 访问坐标(100, 100)的像素值

要修改像素值,只需将新的值赋给相应的位置:

python 复制代码
img[100, 100] = [255, 0, 0]  # 将坐标(100, 100)的像素设置为红色(BGR)

如果你想按通道访问像素值,可以使用cv2.at<channel>函数。例如,要访问像素(x, y)的B通道值,可以使用:

python 复制代码
b_value = cv2.at<uchar>(y, x)[0]  # 注意通道顺序为BGR,所以索引为[0]表示B通道。

图像属性获取

使用shape属性可以获取图像的维度和通道数。shape属性返回一个包含三个元素的元组,分别表示图像的高度、宽度和通道数。

python 复制代码
height, width, channels = img.shape[:3]  # 获取图像的高度、宽度和通道数

ROI定义与处理

ROI(感兴趣区域)是图像处理中的一个重要概念,它允许你处理图像的一部分而不是整个图像。你可以使用cv2.rectangle函数在图像上绘制矩形ROI。这个函数接受四个参数:图像、矩形左上角的坐标、矩形的宽度和高度,以及可选的线条颜色和线条宽度。如果你希望绘制一个填充的矩形,可以将线条宽度设置为-1。

对于ROI的处理,例如对ROI内的像素应用某些操作,可以使用NumPy的切片语法。例如,要获取矩形ROI内的像素值,可以使用以下代码:

python 复制代码
roi = img[50:50+100, 50:50+100]  # 获取ROI的像素值

通道拆分与合并

OpenCV中的彩色图像是按BGR顺序存储的。这意味着像素值包含蓝色、绿色和红色通道的值。如果你想单独处理这些通道,可以使用cv2.split函数拆分通道。这个函数将返回一个通道列表。例如:

python 复制代码
channels = cv2.split(img)  # 将BGR通道拆分到三个通道中。

有时,你可能需要将通道合并为单通道或多通道图像。你可以使用cv2.merge函数合并通道。这个函数接受一个通道列表作为参数,并返回合并后的图像。例如:

python 复制代码
img_merged = cv2.merge([r, g, b])  # 合并通道,注意通道顺序应为BGR,所以需要将r, g, b的顺序改为r, g, b。

图像边框设置

除了之前提到的在图像上绘制矩形边框外,还可以使用cv2.copyMakeBorder函数添加边框。这个函数接受六个参数:输入图像、输出图像、边框宽度、边框类型、可选的填充值和可选的边界值。边框类型可以是几种不同的选项之一,包括常量、平铺重复和镜像反射等。例如:

python 复制代码
# 为图像添加5个像素的边框,边框颜色为白色,类型为矩形。
img_with_border = cv2.copyMakeBorder(img, 5, 5, 5, 5, cv2.BORDER_CONSTANT, value=[255, 255, 255])

后记

今天学习的是Python OpenCV图像操作学会了吗。 今天学习内容总结一下:

  1. 图像读取与显示
  2. 像素值访问与修改
  3. 图像属性获取
  4. ROI定义与处理
  5. 通道拆分与合并
  6. 图像边框设置
相关推荐
Sakura_j_h_1 分钟前
Python 在定时任务里输出 emoji,UnicodeEncodeError 从哪来
开发语言·字符编码·windows·python·定时任务
supabc1231 小时前
欧盟电子发票(XRechnung/Peppol/ZUGFeRD)踩坑记:用 Python 不装 Java 跑官方校验规则
xml·python·开源·电子发票·1024程序员节
ZhengEnCi2 小时前
AI Agent工具调用防护层怎么写-一份能直接跑的Python四层拦截实现
python·llm·agent
ZhengEnCi2 小时前
AI Agent工具误调用怎么解决-从参数校验到高危二次确认的四层工程防线
python·llm·agent
andrsted2 小时前
练题簿在线免费刷题:让整理过的资料,变成能反复练习的题库
学习·微信小程序·小程序·学习方法·刷题·1024程序员节
Alsn863 小时前
Windows 安装 Ollama 及本地模型部署
学习·1024程序员节
镜子AI3 小时前
镜子AI工程教程:用Python实现关键词布局检查器与语义改写查重(附完整代码)
人工智能·python·microsoft
昨日之日20064 小时前
MiniMax-H3 V7(FastH3 Omni):8步生成带声视频,比原版快近10倍。参考图、视频、声音全都能用!
人工智能·计算机视觉·音视频·1024程序员节
再__努力1点4 小时前
RK3576/RV1126B多路视频 AI 开源引擎 CosmoEdge:从模型到交付,轻松搞定!
人工智能·opencv·计算机视觉·架构·课程设计
欣欣之王来了4 小时前
原始HTML插值:v-html指令的使用与安全风险
前端·学习·架构·项目·vue3教程