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

相关推荐
大海变好AI1 分钟前
AIGC分层推理落地能否串联多工具完成自动化闭环
人工智能·python·自动化·aigc
Cosolar11 分钟前
AI Agent 架构原理详解:从一次提问到任务完成的完整闭环
人工智能·后端·架构
小白说大模型11 分钟前
从向量嵌入到复杂 Agent:LLM、LangChain、LangGraph 完整科普
java·开发语言·人工智能·gpt·深度学习·langchain
协享科技18 分钟前
2026 年 AI 表格工具怎么选:ChatGPT、原生 Copilot/Gemini 与公式助手
人工智能·chatgpt·excel·copilot
geo搜搜果数据18 分钟前
实测AI搜索GEO监测工具:对比DeepSeek与豆包品牌排名差异
人工智能·langchain·embedding·搜搜果
王莎莎1 小时前
MCP 解决的是工具接入,科研 Agent 还缺的是科学证据接口标准化
前端·人工智能
码农小白AI1 小时前
工业设备验收迈入智能审核新时代:AI报告审核通审Agent版 IACheck打造检测报告质量管控新引擎
大数据·人工智能
摸鱼师moko1 小时前
AI 来了之后,我的心流状态去哪了
人工智能·程序员
三声三视1 小时前
交互式用够了?用 Agent SDK 把 Claude 塞进 Python Web 服务
人工智能·python·ai·aigc·ai编程
智圣新创011 小时前
高校共生型学生社区生态圈搭建 核心路径与效能升级高频实操答疑
大数据·人工智能