计算机视觉基础——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 之间。

a[100: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. 图像拼接

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

a[50: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的基础操作了。

相关推荐
Giorno3726 分钟前
用 LLM 做数据提取踩了 6 个坑,我加了 6 层防御——15000 张发票的实战总结
人工智能
沉浸式学习ing7 分钟前
播客和视频怎么变成知识库里的笔记?音视频转结构化笔记完整方案
人工智能·笔记·gpt·学习·ai·音视频·notion
Soari12 分钟前
终结 Vibe Coding(Harness Engineering)!深度拆解 ralph:以交付所有 PRD 为生命周期的自主 AI Agent 闭环
自动化测试·人工智能·软件工程·aiagent·ralph·harnesseng·prd驱动
yezannnnnn13 分钟前
ToAgent:下一个被颠覆的不是某个行业,是"App"这个概念本身
人工智能
Marvel__Dead16 分钟前
微调 Gemma 4 识别腾讯天御全系列验证码【解决方案-一个模型识别 滑块|文字点选|图标点选|空间点选】
人工智能·爬虫·python·验证码识别·ai 大模型
Agent手记16 分钟前
成品发货全流程自动化,落地实操与错发漏发规避方案 | 2026企业级Agent端到端落地指南
运维·人工智能·ai·自动化
元让_vincent19 分钟前
论文Review SLAM II-NVM | RA-L 2025 | 面向室内双面墙问题的法向量辅助建图方法
人工智能·机器人·自动驾驶·法向量·激光slam·室内
一个帅气昵称啊20 分钟前
.Net基于NetCoreKevin框架 AI 与 Hangfire 集成:实现AI智能自动任务调度
人工智能·.net·hangfire
byte轻骑兵20 分钟前
【LE Audio】CAP精讲[6]: 控制中枢操盘指南,Commander协同全流程拆解
人工智能·音视频·le audio·低功耗音频
1892280486124 分钟前
NV236美光MT29F32T08GWLBHD6-24TES:B
大数据·服务器·人工智能·科技·缓存