计算机视觉基础——opencv的基础操作

OpenCV 是一个非常好用的计算机视觉库,广泛应用于图像处理、视频分析、目标检测等领域。本文将通过简单易懂的代码,入门 OpenCV 的基础操作,包括图像的读取、显示、保存、灰度转换、裁剪以及通道处理。

一、环境配置

在开始之前,需要先安装 OpenCV 库

python 复制代码
pip install opencv

安装完成后,在 Python 代码中导入库即可使用:

python 复制代码
import cv2
import numpy as np

二、图像基础操作

想要处理图像,我们首先要学会读取和显示图像

2.1. 图像的读取与显示

python 复制代码
import cv2
import numpy as np

a = cv2.imread('pic01.png')
cv2.imshow('tu',a)

cv2.waitKey(0)
cv2.destroyAllWindows()

print('图像形状:', a.shape)
print('图像数据类型:', a.dtype)
print('图像大小:', a.size)

其中

cv2.imread('需要读取的图片路径')

cv2.imshow('展示窗口名称',读取的图片)

cv2.waitKey(0)表示等待按键输入(0表示无限等待,直到按下任意键)

cv2.destroyAllWindows()表示关闭所有显示窗口

2.2. 灰度图转换与保存

对于那些各种花里胡哨的图片,如何让计算机高效的识别图片是一个非常重要的问题,其中灰度图因其单通道图像,数据量更小,成为了很多图像处理的基础预处理步骤:

python 复制代码
import cv2
import numpy as np


b = cv2.imread('pic01.png', cv2.IMREAD_GRAYSCALE)
cv2.imshow('xx', b)

cv2.waitKey(0)
cv2.destroyAllWindows()

print('图像形状:', b.shape)
print('图像数据类型:', b.dtype)
print('图像大小:', b.size)

cv2.imwrite('pic01_GRAY.png', b)

cv2.waitKey(0)
cv2.destroyAllWindows()

cv2.imread('需要读取的图片路径',cv2.IMREAD_GRAYSCALE)这里我们之间在之前读取图片的基础上,加上cv2.IMREAD_GRAYSCALE,就可以读取灰度图片了。

那么如果我们需要保存修改后的文件,直接用cv2.imwrite就可以了

2.3. 图像裁剪

OpenCV 图像本质是 NumPy 数组,通过数组切片即可实现图像裁剪:

python 复制代码
import cv2
import numpy as np

a = cv2.imread('pic01.png')
b = a[30:230,100:300]
cv2.imshow('yuantu',a)
cv2.imshow('qiepian',b)

cv2.waitKey(0)
cv2.destroyAllWindows()

注意:裁剪区域的尺寸必须与原图像匹配,否则会报错。

2.4. 通道分离与合并

OpenCV 彩色图为BGR 顺序(蓝 - 绿 - 红),不同于我们常说的红绿蓝,我们通常就是说成BGR。我们可以将蓝 - 绿 - 红单独对通道进行分离、修改和合并。

python 复制代码
import cv2
a = cv2.imread('pic01.png')
a1 = a[:, :, 0]
a2 = a[:, :, 1]
a3 = a[:, :, 2]
b,g,r = cv2.split(a)
cv2.imshow('b',b)
cv2.imshow('g',g)
cv2.imshow('r',r)

a = cv2.imread('pic01.png')
a_new = a.copy()
a_new[:, :, 1] = 0
a_new[:, :, 2] = 0
cv2.imshow('result2', a_new)

img = cv2.merge((b,g,r))
cv2.imshow('result3',img)
cv2.waitKey(0)
cv2.destroyAllWindows()

如下图是仅保留蓝色通道(将G、R通道置0),当然我们除了分离各个bgr通道,我们还可以将分离的通道合并img_merge = cv2.merge((b, g, r))将各分离的通道还原为原图。

三、像素赋值、图像拼接与缩放

学会了基础操作,我们来更高级的操作,实现像素级操作和图像几何变换,这是实现马赛克、图像合成、尺寸调整的核心。

python 复制代码
import numpy as np
import cv2

a = cv2.imread('pic01.png')
xxx=np.random.randint(0,256,(3,3))
print(xxx)
a[100:200,200:300] = np.random.randint(0,256,(100,100,3))#矩阵赋值必须是相同大小
cv2.imshow('masaike',a)
cv2.waitKey(0)
cv2.destroyAllWindows()

a = cv2.imread('pic01.png')
b = cv2.imread('bizhi.jpg')
b[200:350,200:350] = a[50:200,100:250]
cv2.imshow('b',b)
cv2.imshow('a',a)
cv2.waitKey(0)
cv2.destroyAllWindows()

a = cv2.imread('pic01.png')
a_new = cv2.resize(a, dsize=(200,200))
cv2.imshow('a',a)
cv2.imshow('a_new',a_new)
cv2.waitKey(0)
cv2.destroyAllWindows()

3.1实现马赛克效果

np.random.randint(0,256,(3,3)):生成一个 3 行 3 列的二维数组,元素值在 0-255 之间。

a100:200,200:300:选取图像a中「y 轴 100-200 行、x 轴 200-300 列」的区域,该区域尺寸为 100行 × 100列 × 3通道。

np.random.randint(0,256,(100,100,3)):生成与目标区域尺寸完全匹配的随机像素矩阵(100×100×3),赋值后该区域像素变为随机值,形成马赛克效果。

3.2. 图像拼接

b200:350,200:350:y 轴 200-350 行(共 150 行),x 轴 200-350 列(共 150 列),尺寸为 150×150×3。

a50:200,100:250:y 轴 50-200 行(共 150 行),x 轴 100-250 列(共 150 列),尺寸为 150×150×3。

将图像a的局部区域,直接覆盖粘贴到图像b的指定位置,实现简单的图像合成。

3.3. 图像缩放

cv2.resize(img,dsize=(宽度, 高度))修改图像的尺寸。

cv2.resize默认使用双线性插值(INTER_LINEAR),可通过interpolation参数修改。

四、视频基础操作

python 复制代码
import cv2

video_capture = cv2.VideoCapture('test.avi')
if not video_capture.isOpened():
    print('cannot open video')
    exit(0)

while True:
    ret, frame = video_capture.read()
    if not ret:
        break

    frame=cv2.cvtColor(frame,cv2.COLOR_BGR2GRAY)
    cv2.imshow("Video",frame)
    if cv2.waitKey(60) == 27:
        break
video_capture.release()
cv2.destroyAllWindows()

cv2.VideoCapture():用于打开视频文件或摄像头。

cap.read():返回(是否读取成功, 当前帧图像),视频结束时ret=False。

cv2.waitKey(30):控制播放速度,30ms / 帧约等于 33 帧 / 秒,接近常见视频帧率。

以上就是opencv的基础操作了。

相关推荐
IT_Octopus25 分钟前
【零基础入门 LLM 开发 · Day 13】:LangChain 的对话记忆——Message 对象版
人工智能·python·langchain
2603_965148111 小时前
社区与学习资源:从入门到精通的API选品学习路径
数据库·人工智能·python·学习·数据挖掘
LiuPig刘皮哥1 小时前
2026年开源3D陪玩对比:xiaoke.ai、AIRI、Open-LLM-VTuber、Amica 有什么、没有什么
人工智能·3d·开源
西柚小萌新1 小时前
【岗位面试】--成都博维数孪 - 工业 AI 解决方案顾问
人工智能·面试·职场和发展
Luminbox紫创测控1 小时前
车载LiDAR强光测试的实验设计方法与数据分析
人工智能·数据挖掘·数据分析·车载系统·安全性测试·太阳光模拟器
硅谷秋水2 小时前
CommitFlow:面向长时程机器人操作 VLA 执行的语义承诺验证与局部修正
机器学习·计算机视觉·语言模型·机器人
建筑工程企业管理系统2 小时前
工程进度统计管理系统自动化汇总数据,解决施工企业手工对账误差难题
大数据·人工智能·自动化
唠点键盘之外的2 小时前
27 存量系统接大模型:旁挂一个 AI 微服务,老架构一行不改
人工智能·微服务·架构
kaixin_啊啊3 小时前
【用于更准确 G×E 基因组预测的大规模作物数据集与基于深度学习的多模态融合框架】论文学习
人工智能·深度学习·学习
GOWIN革文品牌咨询3 小时前
工业测量品牌系统化搭建指南:从内容架构到长期治理的全流程
大数据·人工智能·架构