计算机视觉基础——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的基础操作了。

相关推荐
搬砖者(视觉算法工程师)2 小时前
用直白语言讲透 Transformer
人工智能
VALENIAN瓦伦尼安教学设备2 小时前
便携式蒸汽阀门漏气检测仪作用
人工智能·嵌入式硬件·算法
成都它思科技有限公司2 小时前
语音识别错误率是多少,我们认为错误率是多少?
人工智能·语音识别
Cx330❀2 小时前
Linux ELF格式与可执行程序加载全解析:从磁盘文件到运行进程
linux·运维·服务器·人工智能·科技
杜子不疼.2 小时前
2026年AI Agent实战:从玩具到生产力的落地手册(附源码)
人工智能
科技快报2 小时前
华为发布AI数据平台,重塑数据基座,加速企业AI应用落地
大数据·人工智能·华为
智塑未来2 小时前
哪些GEO服务商有自研AI监测工具?2026年AI品牌监测平台深度对比
人工智能
不懒不懒2 小时前
【零基础入门 PyTorch:实现食物图片分类任务】
人工智能·pytorch·python
PengShuaiD52 小时前
【AI编码】用ChatGPT基于Whisper+ffmpeg实现一个根据视频字幕执行自动化裁剪本地小工具
人工智能·chatgpt·ffmpeg·whisper