当前位置: 首页 > news >正文

OpenCV 图像处理基础操作指南(一)

文章目录

  • 一、图像的读取与显示
  • 二、灰度图处理
  • 三、图像切片
  • 四、视频文件读取
  • 五、颜色通道操作
    • 1.提取 RGB 颜色通道
    • 2.合并 RGB 颜色通道
  • 六、图像修改
    • 1.图片打码
    • 2.图片组合
  • 七、图像缩放

OpenCV 是一个强大的计算机视觉库,在图像处理领域应用广泛。本文将基于实际代码示例,介绍 OpenCV 中一些常用的图像处理基础操作,包括图像读取与显示、灰度图处理、图像切片、视频读取、颜色通道操作、图像修改以及图像缩放等内容。


一、图像的读取与显示

在 OpenCV 中,我们可以使用 cv2.imread() 函数读取图像,该函数会返回一个 NumPy 数组,存储着图像的像素值。读取后,使用 cv2.imshow() 函数显示图像,cv2.waitKey() 控制图像显示时间,最后用 cv2.destroyAllWindows() 关闭所有窗口。

import cv2a = cv2.imread('img_1.jpg')  # 读取图片
cv2.imshow('tu', a)  # 显示图片,参数分别为窗口名称和图像数据
b = cv2.waitKey(0)  # 等待用户按键,0 表示无限等待
cv2.destroyAllWindows()  # 关闭所有窗口

我们还可以查看图像的一些属性:

print("图像形状(shape):", a.shape)  # 图像高、宽、通道数
print("图像数据类型(dtype):", a.dtype)  # 通常是无符号8位整数,像素值范围0-255
print("图像大小(size):", a.size)  # 总像素数,即高度×宽度×通道数

二、灰度图处理

读取灰度图可以通过在 cv2.imread() 函数中设置参数实现,参数 cv2.IMREAD_GRAYSCALE 或 0 都表示读取灰度图。读取后同样可以显示并查看其属性,也能使用 cv2.imwrite() 保存灰度图。

a = cv2.imread('img_1.jpg', 0)  # 读取灰度图
cv2.imshow('tu', a)
b = cv2.waitKey(10000)
cv2.destroyAllWindows()
print('图像形状(shape):', a.shape)
print('图像数据类型(dtype):', a.dtype)
print('图像大小(size):', a.size)
cv2.imwrite('img_1_gray.jpg', a)  # 保存灰度图

三、图像切片

图像切片就是截取图像的一部分,通过对图像数组进行切片操作即可实现。

a = cv2.imread('img_1.jpg')
b = a[0:500, 100:300]  # 截取图像的一部分
cv2.imshow('yuantu', a)
cv2.imshow('qiepian', b)
cv2.waitKey(0)
cv2.destroyAllWindows()

四、视频文件读取

使用 cv2.VideoCapture() 打开视频文件或摄像头,然后通过循环逐帧读取视频,对每一帧进行处理和显示,最后释放资源。

# 打开视频文件,若为摄像头则参数为 0
video_capture = cv2.VideoCapture('DSC01703.mp4')
# 检查视频是否成功打开
if not video_capture.isOpened():print("无法打开视频文件")exit()
# 循环读取视频帧
while True:ret, frame = video_capture.read()  # ret 表示是否成功读取帧,frame 是读取到的帧if not ret:break# 可在此添加对帧的处理,如转为灰度图# frame=cv2.cvtColor(frame,cv2.COLOR_BGR2GRAY)cv2.imshow('Video', frame)# 按下 'esc' 键退出循环if cv2.waitKey(60) == 27:break
# 释放资源
video_capture.release()
cv2.destroyAllWindows()

五、颜色通道操作

1.提取 RGB 颜色通道

可以通过数组切片或 cv2.split() 函数提取图像的蓝色(B)、绿色(G)、红色(R)通道。

a = cv2.imread(r'img_1.jpg')
# 数组切片提取
a1 = a[:, :, 0]  # 蓝色通道
a2 = a[:, :, 1]  # 绿色通道
a3 = a[:, :, 2]  # 红色通道
# 或使用 cv2.split() 提取
b, g, r = cv2.split(a)
cv2.imshow('b', b)
cv2.imshow('g', g)
cv2.imshow('r', r)
cv2.waitKey(100000)
cv2.destroyAllWindows()

需要注意的是,单个颜色通道图像显示为灰色,若要显示单通道彩色效果,可将其他通道设为 0。

a = cv2.imread(r'img_1.jpg')
a_new = a.copy()
a_new[:, :, 1] = 0  # 绿色通道设为0
a_new[:, :, 2] = 0  # 红色通道设为0
cv2.imshow('result', a_new)
cv2.waitKey(0)
cv2.destroyAllWindows()

2.合并 RGB 颜色通道

使用 cv2.merge() 函数可以将分离的颜色通道合并成完整图像。

a = cv2.imread(r'img_1.jpg')
b, g, r = cv2.split(a)
img = cv2.merge((b, g, r))
cv2.imshow('img', img)
cv2.waitKey(0)
cv2.destroyAllWindows()

六、图像修改

1.图片打码

通过对图像的特定区域赋值随机像素值实现打码效果,注意赋值的矩阵大小要与目标区域一致。

import numpy as npa = cv2.imread('img_1.jpg')
a[100:200, 200:300] = np.random.randint(0, 256, (100, 100, 3))  # 打码操作
cv2.imshow('masaike', a)
cv2.waitKey(0)
cv2.destroyAllWindows()

2.图片组合

将一张图像的部分区域复制到另一张图像的对应区域,需保证两块区域大小一致。

a = cv2.imread('img_1.jpg')
b = cv2.imread('img_2.jpg')
b[20:50, 100:150] = a[50:80, 100:150]  # 图像组合
cv2.imshow('b', b)
cv2.imshow('a', a)
cv2.waitKey(0)
cv2.destroyAllWindows()

七、图像缩放

使用 cv2.resize() 函数调整图像大小,可通过指定输出大小或缩放系数来实现。

a = cv2.imread('img_1.jpg')
# 方法一:指定输出大小(宽、高)
# a_new = cv2.resize(a, dsize=(200, 600))
# 方法二:指定缩放系数
a_new = cv2.resize(a, None, fx=2, fy=2)
cv2.imshow('a', a)
cv2.imshow('a_new', a_new)
cv2.waitKey(0)
cv2.destroyAllWindows()

以上就是 OpenCV 中一些基础的图像处理操作,这些操作是进行更复杂图像处理和计算机视觉任务的基础,希望能对大家有所帮助。

http://www.xdnf.cn/news/1257697.html

相关文章:

  • 「iOS」————自动释放池底层原理
  • React 中 useRef 使用方法
  • 接入小甲鱼数字人API教程【详解】
  • 透明矿山:科技重塑矿业未来
  • Day09 Tlisa登录认证
  • DAY33打卡
  • 哈勃网络计划大规模升级卫星以创建全球蓝牙层
  • OpenAI 开源模型 gpt-oss 正式上线微软 Foundry 平台
  • 中国北极圈战略部署
  • 数据结构(5)
  • 构建一个简洁优雅的 PHP 参数验证器 —— php-schema-validator
  • concurrentqueue:一个高并发高性能的C++无锁队列
  • 计算机视觉(opencv)——图像本质、数字矩阵、RGB + 基本操作(实战一)
  • 十八、k8s细粒度流量管理:服务网格
  • Netty知识储备:BIO、NIO、Reactor模型
  • 无人机未来的通信脉络:深度解析远距离无线通信模块的革新
  • Numpy科学计算与数据分析:Numpy数组操作入门:合并、分割与重塑
  • Spring Cloud系列—LoadBalance负载均衡
  • 剑指offer第2版——面试题1:赋值运算符函数
  • LINUX-批量文件管理及vim文件编辑器
  • AR技术:制造业质量控制的“智能革新”
  • OpenAI 开源模型 GPT-OSS深度拆解:从1170亿参数到单卡部署,重构AI开源生态
  • Claude Code MCP 网络搜索配置命令
  • Node.js特训专栏-实战进阶:21.Nginx反向代理配置
  • 开源软件与文化:从嬉皮士精神到数字时代的协同创新
  • 计算机网络1-5:计算机网络的性能指标
  • 浅析 Berachain v2 ,对原有 PoL 机制进行了哪些升级?
  • 水下管道巡检机器人cad【10张】三维图+设计说明书
  • OpenCv对图片视频的简单操作
  • KUKA库卡焊接机器人氩气节气设备