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

OpenCV 入门实战:从环境配置到图像 / 视频处理

OpenCV 是计算机视觉领域最常用的开源库之一,它提供了丰富的图像和视频处理功能。本文将从环境配置开始,带大家一步步解析基础操作代码,快速入门 OpenCV 的使用。

一、环境配置

在开始之前,我们需要先搭建好 OpenCV 的运行环境。

1. 安装 Python

OpenCV 支持多种编程语言,其中 Python 接口最为易用。首先确保你的电脑上安装了 Python(推荐 3.7 及以上版本),可以从Python 官网下载安装。

2. 安装 OpenCV 库

打开命令行(Windows 系统可使用 Win+R 输入 cmd,Mac/Linux 使用终端),输入以下命令安装 OpenCV:

pip install opencv-python

如果需要额外的扩展功能(如视频处理相关模块),可以安装:

pip install opencv-contrib-python

二、代码解析:图像基本操作

1. 读取与显示图像

import cv2
# 读取图像(默认以BGR格式读取)
a = cv2.imread('img.png')
# 显示图像,第一个参数是窗口名称,第二个是图像数据
cv2.imshow('cute', a)
# 等待按键(0表示无限等待),返回值是按键的ASCII码
b = cv2.waitKey(0)
# 关闭所有窗口
cv2.destroyAllWindows()

运行结果:

关键说明

  • cv2.imread():如果路径错误会返回None,建议使用绝对路径或检查文件是否存在
  • cv2.imshow():需要配合cv2.waitKey()使用,否则窗口会一闪而过
  • cv2.waitKey(0):等待用户按下任意键,按下的键值会被返回(如按 ESC 键返回 27)

2. 图像属性查看

print(b)  # 输出按下的按键ASCII码
print("图像形状", a.shape)  # 输出(高度, 宽度, 通道数),彩色图通道数为3
print("图像数据类型", a.dtype)  # 通常为uint8(0-255的整数)
print(f"图像大小:", a.size)  # 总像素数 = 高度×宽度×通道数

运行结果:

按下的是'q'返回的是'q'的ASCII码,按下其他的是窗口关闭返回其他按键的ASCII码

3. 灰度图转换

# 以灰度模式读取图像(参数cv2.IMREAD_GRAYSCALE)
b = cv2.imread(r'./img.png', cv2.IMREAD_GRAYSCALE)
cv2.imshow('xx', b)
a = cv2.waitKey(0)
cv2.destroyAllWindows()
# 灰度图的形状是(高度, 宽度),通道数为1
print("图像形状:", b.shape)
print("图像数据类型:", b.dtype)
print("图像大小:", b.size)  # 总像素数 = 高度×宽度

  • 图像转化为灰度图
  • 返回图像属性

4. 图像保存

# 将灰度图保存为新文件
cv2.imwrite('immg.png', b)

产生immg.png图片:

注意imwrite()的第一个参数是保存路径,第二个是图像数据,支持 png、jpg 等多种格式。

5. 图像切片(裁剪)

a = cv2.imread(r'./img.png')
# 切片格式:[起始行:结束行, 起始列:结束列](行数对应高度,列数对应宽度)
b_qie = a[30:230, 100:300]  # 裁剪从第30行到230行,第100列到300列的区域
cv2.imshow('yuantu', a)       # 显示原图
cv2.imshow('qiepian', b_qie)  # 显示切片区域
cv2.waitKey(0)
cv2.destroyAllWindows()

运行结果:

三、代码解析:视频处理基础

1. 调用摄像头

import cv2
# 打开摄像头(0表示默认摄像头,也可以传入视频文件路径)
video_caputure = cv2.VideoCapture(0) 
if not video_caputure.isOpened():print("无法打开摄像头或文件")exit()
while True:# 读取一帧画面,ret是布尔值表示是否读取成功,frame是帧数据ret, frame = video_caputure.read()if not ret:break  # 读取失败则退出循环# 可选:将彩色帧转为灰度帧# frame = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY)cv2.imshow('Video', frame)# 每60毫秒检测一次按键,按下ESC键(ASCII码27)退出if cv2.waitKey(60) == 27:break
# 释放摄像头资源
video_caputure.release()
cv2.destroyAllWindows()

运行结果:

  1. video_caputure = cv2.VideoCapture(0) :括号里也可传入视频地址。

四、代码解析:图像通道操作

OpenCV 读取的彩色图像默认是 BGR 格式(蓝、绿、红),而非常见的 RGB 格式,这一点需要特别注意。

1. 通道分离与显示

import cv2
a = cv2.imread(r'./img.png')
# 直接通过索引获取通道(0=蓝,1=绿,2=红)
a1 = a[:, :, 0]  # 蓝色通道
a2 = a[:, :, 1]  # 绿色通道
a3 = a[:, :, 2]  # 红色通道
# 或使用split函数分离通道
b, g, r = cv2.split(a)
# 分别显示三个通道(单通道图像会以灰度形式显示,值越高越亮)
cv2.imshow('b', b)
cv2.imshow('g', g)
cv2.imshow('r', r)
cv2.waitKey(10000)  # 等待10秒

运行结果:

2. 通道修改

a_new = a.copy()  # 复制原图,避免修改原图
# 将绿色通道和红色通道设为0,只保留蓝色通道
a_new[:, :, 1] = 0
a_new[:, :, 2] = 0
cv2.imshow('result2', a_new)  # 显示纯蓝色图像
cv2.waitKey(10000)
cv2.destroyAllWindows()

运行结果:

五、代码解析:图像编辑进阶

1. 图像涂鸦

  1. 左侧:a [100:200, 200:300]:选取图像中,100:200 表示选取图像的行范围(垂直方向)200:300 表示选取图像的列范围(水平方向) 100×100 像素的矩形区域

  2. 右侧:np.random.randint (0, 256, (100, 100, 3)):np.random.randint() 生成指定范围的随机整数,0, 256 表示生成 [0, 255] 之间的整数(符合图像像素值范围),(100, 100, 3) 表示生成的数组形状:100 行、100 列、3 个通道(与左侧选取的区域大小完全匹配)生成一个充满随机颜色值的三维数组,模拟彩色图像的像素数

将右侧生成的随机颜色数组,赋值给左侧选取的图像区域,图像中 100:200 行、200:300 列的区域会被随机颜色覆盖

import cv2
import numpy as np
a = cv2.imread(r'img.png')
# 在图像的(100:200行, 200:300列)区域填充随机颜色
a[100:200, 200:300] = np.random.randint(0, 256, (100, 100, 3))
cv2.imshow('masaike', a)
cv2.waitKey(1000000)  # 长时间等待,方便观察

运行结果:

2. 图像融合(粘贴)

b[200:350, 200:350] = a[50:200, 100:250]:将右侧150×150 的区域复制粘贴给左侧150×150区域 

a = cv2.imread('img.png')
b = cv2.imread('longnv.webp')
# 将a的(50:200行, 100:250列)区域粘贴到b的(200:350行, 200:350列)区域
# 注意:两个区域的大小必须一致(150x150)
b[200:350, 200:350] = a[50:200, 100:250]
cv2.imshow('b', b)
cv2.imshow('a', a)
cv2.waitKey(10000)

运行结果:

3. 图像缩放

a = cv2.imread('img.png')
# 将图像缩放到宽度200,高度600(注意参数是(width, height))
a_new = cv2.resize(a, (200, 600))
cv2.imshow('a', a)
cv2.imshow('a_new', a_new)
cv2.waitKey(10000)
cv2.destroyAllWindows()

运行结果:

六、总结

这些操作是 OpenCV 的基础,掌握后可以进一步学习更复杂的功能,如边缘检测、目标识别等。建议大家多动手尝试,修改代码中的参数(如切片范围、缩放尺寸),观察结果变化,加深理解。

如果运行中遇到问题,首先检查文件路径是否正确,其次确认 OpenCV 版本是否兼容(可以通过print(cv2.__version__)查看版本)。祝大家在计算机视觉的路上越走越远!

http://www.dtcms.com/a/319552.html

相关文章:

  • Java 八大经典排序算法全解析
  • Redis持久化存储
  • 2025 年华数杯赛题浅析-助攻快速选题
  • Centos6停止服务后yum改用阿里云
  • Syzkaller实战教程10: MoonShine复现Trace2syz功能演示
  • 手动开发一个TCP服务器调试工具(三):使用 QWidget 构建 TCP 服务控制界面
  • 强化学习详解:从理论到前沿的全面解析
  • 【Redis面试精讲 Day 15】Redis分布式锁实现与挑战
  • C++ 类和对象(2)
  • Kubernetes学习
  • 安卓开发:网络状态监听封装的奥秘
  • 根据浏览器语言判断wordpress访问不同语言的站点
  • 计算机视觉前言-----OpenCV库介绍与计算机视觉入门准备
  • Python 偏函数(functools.partial)详解
  • MySQL ORDER BY 语句详细说明
  • SVG组件
  • 96-基于Flask的酷狗音乐数据可视化分析系统
  • 微信小程序常见功能实现
  • OpenCV 入门教程:开启计算机视觉之旅
  • uwsgi 启动 django 服务
  • Next.js 15 重磅发布:React 19 集成 + 性能革命,开发者必看新特性指南
  • CentOS 7 安装 Anaconda
  • 秋招笔记-8.7
  • Redis的三种特殊类型
  • 硬盘哨兵pe版本 v25.70.6 中文免费版
  • 【R语言】 高清美观的 MaxEnt 刀切图(Jackknife)绘制——提升论文质量
  • 基于Qt的Live2D模型显示以及控制
  • DAY33打卡
  • 【Unity输入系统】自定义与双击不冲突的单击Interaction
  • 【第八章】函数进阶宝典:参数、返回值与作用域全解析