OpenCV从零入门:图像读取、ROI裁剪、马赛克与视频处理
文章目录前言1. 环境准备1.1 安装OpenCV1.2 安装NumPy1.3 导入习惯2. 图像的基础读写与显示2.1 读取、显示、保存2.2 图像属性shape, dtype, size2.3 灰度图读取3. ROI感兴趣区域操作4. BGR颜色通道的分离与合并5. 图像修改实战5.1 随机噪声马赛克打码5.2 图像组合粘贴ROI5.3 图像缩放resize6. 视频文件的读取与摄像头调用7. 综合作业全流程拆解7.1 作业需求7.2 分步实现总结前言OpenCV 是一个强大的开源计算机视觉库为图像处理和机器学习提供了丰富的算法。本文是一份面向初学者的 OpenCV 入门指南涵盖从环境搭建到实战应用的核心内容。搭建 OpenCV 开发环境。掌握图像的读取、显示、保存等基础操作。理解并实践 ROI 操作、BGR 通道分离与合并。动手进行图像修改马赛克、组合、缩放。学习视频读取与摄像头调用。通过综合作业整合所学知识。让我们开始 OpenCV 的学习之旅。1. 环境准备1.1 安装OpenCVpip install opencv-python 3.4.18.65 -i https://pypi.tuna.tsinghua.edu.cn/simple pip install opencv-contrib-python3.4.18.65 -i https://pypi.tuna.tsinghua.edu.cn/simple1.2 安装NumPypip install numpy1.3 导入习惯import cv2BGR格式、import numpy as np2. 图像的基础读写与显示2.1 读取、显示、保存importcv2importnumpyasnp# ------------------ 读取彩色图 ------------------img_colorcv2.imread(time98.jpg)# 读取格式为 BGR# print(img_color) #NumPy数组其中存储了读取的图像文件的像素值cv2.imshow(彩色原图,img_color)# waitKey(0) 表示永久显示按任意键关闭1.设置窗口显示时长单位ms2.获取按键的ASCII码值3.设置waitKey(0)代表窗口显示永久 cv2.waitKey(0)cv2.destroyAllWindows()#关闭所有打开的窗口并释放所有相关内容2.2 图像属性shape, dtype, size#----------------------打印图像属性----------------------------print(图像形状(shape):,img_color.shape)# (高, 宽, 通道数)print(图像数据类型(dtype):,img_color.dtype)# uint8 符号8位整数用于表示像素值的范围在0-255之间print(图像大小(size):,img_color.size)#表示图像的大小通常是一个整数表示图像的总像素数即图像的高度乘以宽度乘以通道数2.3 灰度图读取# ------------------ 读取灰度图并保存 ------------------img_graycv2.imread(time98.jpg,cv2.IMREAD_GRAYSCALE)cv2.imshow(灰度图,img_gray)print(灰度图形状(shape):,img_gray.shape)# 只有(高, 宽)无通道数# 保存到本地cv2.imwrite(time98_GRAY.jpg,img_gray)cv2.waitKey(0)cv2.destroyAllWindows()3. ROI感兴趣区域操作importcv2 imgcv2.imread(time98.jpg)# 截取 ROI行范围 30~230列范围 100~300roiimg[30:230,100:300]cv2.imshow(原图,img)cv2.imshow(截取ROI区域,roi)cv2.waitKey(0)cv2.destroyAllWindows()4. BGR颜色通道的分离与合并importcv2 imgcv2.imread(time98.jpg)# ---------- 方法1通过NumPy索引提取 ----------blue_channelimg[:,:,0]# 蓝色通道green_channelimg[:,:,1]# 绿色通道red_channelimg[:,:,2]# 红色通道# ---------- 方法2使用 split 函数 ----------b,g,rcv2.split(img)# 分别显示三个灰度通道# 分别显示注意显示出来是单通道灰度图越亮表示该颜色值越高cv2.imshow(Blue通道,b)cv2.imshow(Green通道,g)cv2.imshow(Red通道,r)# ---------- 合并通道还原彩图 ----------img_mergedcv2.merge((b,g,r))cv2.imshow(合并后的彩图,img_merged)cv2.waitKey(0)cv2.destroyAllWindows()5. 图像修改实战5.1 随机噪声马赛克打码importcv2importnumpyasnp imgcv2.imread(time98.jpg)# 在指定区域生成随机噪声100x100像素块# 注意赋值区域尺寸必须和随机矩阵尺寸完全一致img[100:200,200:300]np.random.randint(0,256,(100,100,3),dtypenp.uint8)cv2.imshow(马赛克打码效果,img)cv2.waitKey(0)cv2.destroyAllWindows()5.2 图像组合粘贴ROIimportcv2 img1cv2.imread(time98.jpg)# 源图img2cv2.imread(aaa1.jpg)# 目标大图# 将 img1 的 (50:200, 100:250) 区域粘贴到 img2 的 (200:350, 200:350) 位置# 前提两个区域尺寸必须一致这里都是 150x150img2[200:350,200:350]img1[50:200,100:250]cv2.imshow(组合后的图,img2)cv2.waitKey(0)cv2.destroyAllWindows()5.3 图像缩放resizeimportcv2 imgcv2.imread(time98.jpg)# 方法1直接指定目标尺寸 (宽, 高)img_resize1cv2.resize(img,(200,200))# 方法2按比例缩放fx为宽缩放比fy为高缩放比img_resize2cv2.resize(img,None,fx0.5,fy0.5)cv2.imshow(原图,img)cv2.imshow(缩放为200x200,img_resize1)cv2.imshow(缩放为0.5倍,img_resize2)cv2.waitKey(0)cv2.destroyAllWindows()6. 视频文件的读取与摄像头调用importcv2# 参数为 0 表示调用电脑自带摄像头若填写视频路径则读取视频文件video_capturecv2.VideoCapture(0)ifnotvideo_capture.isOpened():print(无法打开摄像头/视频)exit()whileTrue:ret,framevideo_capture.read()ifnotret:break# 可选将每一帧转为灰度显示# frame cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY)cv2.imshow(Video,frame)# 按下 ESC 键ASCII 码 27退出循环ifcv2.waitKey(60)27:break# 释放摄像头资源并关闭窗口video_capture.release()cv2.destroyAllWindows()7. 综合作业全流程拆解7.1 作业需求读取一张彩色原图(dongwu.jpg)将其尺寸修改为 500×500依次完成以下所有操作1、截取左上角 ROI 区域行范围 0:250列范围 100:2502、将截取的 ROI 区域精准粘贴到右下角目标位置行 250:500列 250:4003、在图像右上角区域选取黑色小鸟区域进行随机噪声马赛克打码4、将处理后的彩色图像转换为灰度图像并保存到本地5、最终同时显示处理后的彩色图像以及灰度图像7.2 分步实现importcv2importnumpyasnp# 1. 读取图像并修改尺寸为 500x500imgcv2.imread(dongwu.jpg)imgcv2.resize(img,(500,500))# 2. 截取左上角 ROI 区域行 0:250列 100:250roiimg[0:250,100:250]# 3. 将 ROI 精准粘贴到右下角行 250:500列 250:400img[250:500,250:400]roi# 4. 在右上角 黑色小鸟 区域进行随机噪声马赛克打码# (根据原图自行调整坐标此处示例为 50:150, 330:430尺寸 100x100)img[50:150,330:430]np.random.randint(0,256,(100,100,3),dtypenp.uint8)# 5. 将处理后的彩色图像转为灰度图并保存gray_imgcv2.cvtColor(img,cv2.COLOR_BGR2GRAY)cv2.imwrite(huise_final.jpg,gray_img)# 6. 同时显示处理后的彩色图像和灰度图像cv2.imshow(处理后的彩色图,img)cv2.imshow(转换后的灰度图,gray_img)cv2.waitKey(0)cv2.destroyAllWindows()总结本文系统介绍了 OpenCV 的基础操作与核心应用环境与基础搭建了 OpenCV 和 NumPy 环境建立了import cv2和import numpy as np的编码习惯。图像读写与显示掌握了cv2.imread、cv2.imshow、cv2.imwrite的使用理解了彩色图与灰度图的区别及属性。核心图像操作ROI 操作使用 NumPy 切片截取图像区域。BGR 通道分离与合并使用cv2.split()和cv2.merge()处理颜色通道。图像修改实战实践了随机噪声马赛克、图像组合粘贴 ROI和图像缩放cv2.resize。视频处理入门学习了使用cv2.VideoCapture()读取视频或调用摄像头。知识整合通过综合作业串联了读取、缩放、ROI、粘贴、马赛克、色彩转换、保存与显示等完整流程。

相关新闻

大模型已经很会搜索了,为什么还需要 QVeris?

大模型已经很会搜索了,为什么还需要 QVeris?

QVeris 产品解读 大模型已经很会搜索了,为什么还需要 QVeris?搜到信息,和获得可以直接工作的数据,是两件事。 假设你对一个金融 Agent 说:"帮我看看这家公司最近有什么变化。"今天的大模型很会搜。它可以找…

2026/10/11 19:34:34 阅读更多 →
WordPress性能优化指南:12个实操加速技巧

WordPress性能优化指南:12个实操加速技巧

网页的加载响应速度直接决定了用户的留存率、转化率以及搜索引擎的抓取权重。对于许多进行 wordpress建站 的站长和企业来说,随着文章数量的增加与插件的累积,网站往往容易出现访问卡顿、白屏时间过长等性能瓶颈。 衡量网站性能的核心指标包括首屏加载时…

2026/10/14 22:05:22 阅读更多 →
Agent 三大件都配齐了,为什么实战还是翻车?

Agent 三大件都配齐了,为什么实战还是翻车?

聊《工具调用记忆与任务规划都配齐了,为什么Agent还是不好用?》之前,先说一句实在的:别急着背概念,先看它在真实项目里到底解决什么问题。摘要最近帮朋友看他们的 Agent 项目,框架搭得挺全:Lang…

2026/10/13 2:02:28 阅读更多 →

最新新闻

CTF新手题easychallenge:Python脚本加密与逆向思路全解析

CTF新手题easychallenge:Python脚本加密与逆向思路全解析

前两天在攻防世界的 CRYPTO 新手练习区刷题,刷到 easychallenge 这一道,名字起得特别诚实,但实战起来也不能说完全 easy。它不考复杂的数学公式,也不考高深的密码算法,更像是给你一段加密脚本,让你自己把它…

2026/10/15 21:22:32 阅读更多 →
ESP8266接OLED:从选型接线到点亮显示全教程

ESP8266接OLED:从选型接线到点亮显示全教程

你有没有过这种体验:ESP8266串口打印出来的数据堆了一屏,盯着串口监视器看得眼花缭乱,明明传感器读出了26.5℃,却没法让这个数字变成一眼能看懂的"画面"。我第一次做物联网小项目时就被这个问题卡了很久。后来接上一块0…

2026/10/15 21:22:32 阅读更多 →
嵌入式C++单链表实战:内存可控的类型擦除链表设计

嵌入式C++单链表实战:内存可控的类型擦除链表设计

1. 这不是教科书里的“单链表”,而是你明天就能抄进项目的实战结构 单链表——这三个字一出来,很多人脑子里立刻浮现出黑板上画的箭头、节点、next指针,还有老师念叨的“头结点不存数据”“遍历时间复杂度O(n)”……但现实里,我带…

2026/10/15 21:22:32 阅读更多 →
ESP8266驱动OLED屏入门:接线、配置与点亮指南

ESP8266驱动OLED屏入门:接线、配置与点亮指南

1. OLED屏与ESP8266的适配思路 手头正好有一块0.96寸的OLED屏,一直想做个小玩意儿,就顺手用ESP8266驱动了起来。先说结论:这对于入门嵌入式显示来说,是很典型也很有意思的组合——OLED功耗低、自发光、显示效果好,ESP8…

2026/10/15 21:22:32 阅读更多 →
ESP8266驱动OLED屏:从选型到点亮,玩转中文显示与动画

ESP8266驱动OLED屏:从选型到点亮,玩转中文显示与动画

做嵌入式小项目时,最烦的不是代码跑不起来,而是跑起来之后什么都看不见。传感器数据全堆在串口里,手机又懒得开,这时候给 ESP8266 配上一块 OLED 屏幕,整个项目立刻“活”了。这篇文章是 OLED 在 ESP8266 中应用系列的…

2026/10/15 21:22:32 阅读更多 →
YOLOv10【第十一章:生成式 AI 与自动标注篇·第1节】生成式 AI 如何赋能 YOLOv10:数据、标签、推理三条路线

YOLOv10【第十一章:生成式 AI 与自动标注篇·第1节】生成式 AI 如何赋能 YOLOv10:数据、标签、推理三条路线

🏆 本文收录于 《YOLOv10实战:从入门到深度优化》 专栏。 该专栏系统复现并深度梳理全网主流 YOLOv10 改进方法与工程实战案例,覆盖分类、目标检测、实例分割、多目标追踪、关键点检测、旋转目标检测等多个方向,坚持 持续更新 + 深度解析 + 工程验证。 专栏将围绕 YOLOv10…

2026/10/15 21:21:31 阅读更多 →

日新闻

Docker Compose 容器化部署 ChirpStack LoRaWAN 网络服务器实战

Docker Compose 容器化部署 ChirpStack LoRaWAN 网络服务器实战

1. 为什么选择容器化方式部署 LoRa 网络服务LoRa 物联网项目落地时,网络服务器是整个链路的核心枢纽。它负责接收网关上报的数据包、完成去重与解密、再把有效载荷分发给上层应用。早期大家习惯把网络服务器直接装在物理机上,依赖一堆系统库和特定版本的…

2026/10/15 0:00:46 阅读更多 →
共享LLM服务下的跨模型自动扩缩容:Kubernetes实战与避坑指南

共享LLM服务下的跨模型自动扩缩容:Kubernetes实战与避坑指南

1. 共享推理服务里,扩缩容到底难在哪做过大模型推理服务部署的人,大概都经历过这样的场景:一个团队共用一套推理集群,A 业务跑的是 7B 的小模型,B 业务跑的是 72B 的大模型,C 业务白天流量高、晚上几乎归零…

2026/10/15 0:00:46 阅读更多 →
Systemd 启动阶段根文件系统只读之谜:fstab 与 remount-fs 服务深度解析

Systemd 启动阶段根文件系统只读之谜:fstab 与 remount-fs 服务深度解析

1. 引子:一次内核恐慌引发的追查先从一个真实场景说起。某次我给一台老旧的嵌入式设备折腾系统裁减,为了把启动时间压进两秒以内,我手贱地把一串自认为“没用”的 systemd 服务给 disable 了,其中就包括systemd-remount-fs.servic…

2026/10/15 0:00:46 阅读更多 →

周新闻

流感时间序列预测实战:ARIMA/LSTM全流程拆解与避坑指南

流感时间序列预测实战:ARIMA/LSTM全流程拆解与避坑指南

简介:基于 ARIMA、LSTM、Transformer 等模型的流感时间序列预测 Python 源码,面向计算机相关专业课程设计与期末大作业学生,以及项目实战学习者。内容覆盖预处理、平稳性检验、定阶、残差分析、多模型对比预测的完整时序建模流程,…

2026/10/15 16:18:54 阅读更多 →
影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别

影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别

影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别 做影刀RPA自动化,十个新手有八个栽在"往输入框里填东西"这件事上:要么填不进去,要么填了一半,要么直接把原来内容追加在后面。这背后的根因&…

2026/10/15 19:41:51 阅读更多 →
影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容

影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容

影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容 1. 认识影刀:什么场景该用RPA采小说数据 起点中文网的页面结构相对稳定——分类榜单、书籍详情、章节内容三块独立页面,跳转链路清晰。这种场景非常适合影刀自动化&#x…

2026/10/15 13:48:15 阅读更多 →

月新闻

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/15 0:14:36 阅读更多 →
Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/14 22:45:47 阅读更多 →
黑夜航拍船只数据集训练YOLOV5模型全流程解析

黑夜航拍船只数据集训练YOLOV5模型全流程解析

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/15 9:49:14 阅读更多 →