OpenCV入门案例1
1.练习环境搭建
1.Anaconda平台 ✏️
Anaconda平台
1. 为什么选择Anaconda平台?
作为一名有着多年Python开发经验的程序员,曾因环境配置问题浪费了无数时间。直到遇见Anaconda,这些烦恼才终于得到解决。Anaconda是什么?简单来说,它是一个开源的Python发行版,专为科学计算和数据分析设计,已经成为数据科学工作者的必备工具。
选择Anaconda的核心理由:
- 一站式解决方案:预装了数百个常用科学计算库和工具
- 优秀的包管理功能:conda命令可以轻松安装、更新和管理各种包
- 完善的环境隔离:为不同项目创建独立的虚拟环境,避免依赖冲突
- 跨平台兼容:Windows、MacOS和Linux系统均可使用
- 图形界面支持:提供Anaconda Navigator可视化管理工具,适合新手使用
无论你是科学计算入门者,还是机器学习研究者,Anaconda都能极大提升你的开发效率。接下来,让我们一步步完成Anaconda的安装与配置。
2. 准备工作
在开始安装之前,先检查是否已经安装了Anaconda。打开命令行窗口,输入以下命令:
conda --version如果显示版本号,说明已经安装了Anaconda。如果没有安装,可以参考以下步骤进行安装。
👇 👇 👇👇
在开始安装前,请确保你的系统满足以下基本要求:
磁盘空间:至少5GB可用空间(完整安装后约3GB,使用过程中会增长)
系统要求:
- Windows: Windows 8.1或更高版本(64位)
- MacOS: 10.13+(推荐12.0+)
- Linux: 包括Ubuntu、CentOS、RHEL等主流发行版
温馨提示:安装前最好临时关闭杀毒软件,某些杀毒软件可能会干扰安装过程。另外,确保你有稳定的网络连接或使用本文提供的离线安装包。
3. 安装包下载
Anaconda的安装包可以从Anaconda官网下载,https://www.anaconda.com/products/distribution
也可以从清华镜像站下载,https://mirrors.tuna.tsinghua.edu.cn/anaconda/archive/

本课程使用 Anaconda3-5.3.1-Windows-x86_64.exe. 最新版本也可以!!

4. 安装Anaconda
右击用管理员身份运行安装包,进入安装向导,按照提示完成安装即可。安装过程中,需要选择安装路径,建议选择默认路径,避免后续出现环境变量问题。
安装步骤:
右击用管理员身份运行安装包
欢迎界面,点击Next,进入许可协议,点击同意
选择安装类型All User (推荐),点击Next
选择安装路径,强烈建议不要安装在C盘! , 我安装在
D:\javasoftware\Anaconda3非中文目录下,点击Next进入高级选项设置
- 【Add Anaconda to my PATH environment variable】:是否添加到系统环境变量--如果从来没有安装过Python,建议勾选,否则不勾选
- 【Register Anaconda as my default Python】:是否注册为默认Python环境--勾选
点击Install,等待安装完成,直到Finsh


验证是否安装成功
打开Anaconda Prompt,输入
conda --version,如果出现版本号,说明安装成功
如果出现了
command not found,说明需要配置环境变量- 按下Win + R组合键,输入sysdm.cpl并回车(或者右键点击"此电脑"→"属性"→"高级系统设置")进入系统环境变量设置(如图1)
- 添加Anaconda相关路径到Path下,点击确定,保存。
- 重新打开Anaconda Prompt,输入
conda --version,如果出现版本号,说明安装成功 - 如果仍然出现了
command not found,举手问焱哥。
5. Anaconda 基础使用入门
1. Anaconda的两种使用方式
- 命令行界面(CLI)

通过命令提示符/终端使用conda命令进行操作:
打开命令提示符(Windows)或终端(MacOS/Linux)
直接输入conda命令,例如:
conda --version
conda list
小贴士:Windows用户还可以使用"Anaconda Prompt",这是一个预配置好环境变量的命令行工具,无需手动配置环境变量即可使用。在开始菜单中找到并启动它。- Anaconda Navigator图形界面

对于不熟悉命令行的用户,Anaconda Navigator提供了友好的图形界面:
在开始菜单/应用程序中找到并启动"Anaconda Navigator"
通过界面可以轻松管理环境、安装包和启动应用程序
启动Navigator的命令行方式:
anaconda-navigator2. 首次使用检查
无论使用哪种方式,首次使用时建议执行以下检查:
检查版本信息
conda --version
python --version查看已安装的包
conda list
可以发现常见的数据挖掘用到的 numpy、scipy,pandas、matplotlib、statsmodels、scikit-learn等包已经安装了
检查Anaconda是否需要更新(一般不用更新)
conda update conda如果有更新,输入y确认更新。
3. 创建虚拟环境(可选)
在实际使用过程中,我们可能需要同时安装多个版本的Python,或者安装多个Python包,为了方便管理,我们可以创建多个虚拟环境。
conda create --name yangeit python=3.11解释:
conda create:创建新环境的命令--name yangeit:为新环境指定名称为yangeitpython=3.11:指定新环境的Python版本为3.11

激活虚拟环境
conda activate yangeit
# 然后输入python --version,可以看到已经切换到yangeit环境了
python --version
查看已经存在的环境
conda env list
默认使用base环境,本课程使用的是默认的base环境
4. 配置下载源,加速下载
首先,打开Anaconda Prompt,输入以下命令:
# 添加Anaconda官方镜像
conda config --add channels https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/free/
conda config --add channels https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/main/
conda config --add channels https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/r/
conda config --add channels https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/pro/
conda config --add channels https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/msys2/
# 添加PyTorch专属镜像(避免下载PyTorch时速度慢)
conda config --add channels https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud/pytorch/
# 添加NVIDIA相关镜像(加速CUDA工具包下载)
conda config --add channels https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud/nvidia/
# 添加conda-forge社区镜像(包含大量第三方库)
conda config --add channels https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud/conda-forge/
# 设置搜索时显示通道地址(可选,方便确认是否使用了国内镜像)
conda config --set show_channel_urls yes验证 conda 镜像:
conda config --show channels接着配置pip下载源,配置 pip 国内镜像:
在Anaconda Prompt中执行以下命令,生成配置文件并添加镜像:
# 创建pip配置目录(Windows专用)
mkdir %APPDATA%\pip
# 生成pip配置文件并写入国内镜像
echo [global] > %APPDATA%\pip\pip.ini
echo index-url = https://pypi.tuna.tsinghua.edu.cn/simple/ >> %APPDATA%\pip\pip.ini
echo [install] >> %APPDATA%\pip\pip.ini
echo trusted-host = pypi.tuna.tsinghua.edu.cn >> %APPDATA%\pip\pip.ini接着,执行以下命令,pip config list,若输出global.index-url=pypi.tuna.tsinghua.edu.cn则表示配置成功。
5.卸载Anaconda(可选)
如果卸载,按照下面的指令
# 1.打开 Anaconda Prompt
# 2.安装 anaconda- clean 包
conda install anaconda-clean
# 3.运行 anaconda-clean
anaconda-clean --yes
# 4.删除Anaconda备份目录,.anaconda_backup,在用户目录下
# 5.删除Anaconda安装目录下的的envs和pkgs目录(这2个很大很大,一般10G以上),也可以直接卸载Anaconda,这些文件都会删除
# 6.打开「添加删除程序」,并且卸载 Anaconda
# 7.重启计算机总结
课堂作业
- 在自己的电脑上,安装Anaconda,并配置好环境变量🎤
2.Jupyter Notebook ✏️
Jupyter Notebook

Jupyter Notebook是基于网页的用于交互计算的应用程序。其可被应用于全过程计算:开发、文档编写、运行代码和展示结果。——Jupyter Notebook官方介绍
简而言之,Jupyter Notebook是以网页的形式打开,可以在网页页面中「直接」编写代码和运行代码,代码的运行结果也会直接在代码块下显示。如在编程过程中需要编写说明文档,可在同一个页面中直接编写,便于作及时的说明和解释。
1. 安装Jupyter Notebook
因为已经安装了Anaconda,所以Jupyter Notebook已经安装好了,无需单独安装。
直接在开始菜单中找到图标,点击即可打开即可
如果没有图标,则在Anaconda Prompt中输入以下命令:
jupyter notebook
自动打开浏览器,自动跳转到Jupyter Notebook的首页。
当执行完启动命令之后,浏览器将会进入到Notebook的主页面,如下图所示。


如果你的主页面里边的文件夹跟我的不同,或者你在疑惑为什么首次启动里边就已经有这么多文件夹,不要担心,这里边的文件夹全都是你的家目录里的目录文件。接下来
我们设置Jupyter Notebook文件存放位置:
- 在非中文目录下创建一个文件夹,例如:
D:\javasoftware\jupyter_notebook - 在Anaconda Prompt中输入以下命令:
# 生成配置文件
jupyter notebook --generate-config
- 打开生成的配置文件,找到以下内容,修改为:
# c.NotebookApp.notebook_dir = ''
c.NotebookApp.notebook_dir = 'D:\\javasoftware\\jupyter_notebook'
- 保存并关闭配置文件,重新启动Jupyter Notebook,即可看到文件已经改变到我们指定的目录下。

2. Jupyter Notebook界面介绍
主页面内容
编辑界面(Notebook Editor)
一个notebook的编辑界面主要由四部分组成:名称、菜单栏、工具条以及单元(Cell),如下图所示:

3. Jupyter Notebook的常用快捷键

好,接下来,我们在Jupyter Notebook中编写第一个程序,来体验一下Jupyter Notebook的强大之处吧!!
print("Hello World!")
总结
课堂作业
- 在Jupyter Notebook中编写第一个程序,来体验一下Jupyter Notebook的强大之处吧!!
2. OpenCV简介
1. 图像处理简介
图像的起源
1.图像的起源
1.1 图像是什么
图像是⼈类视觉的基础,是⾃然景物的客观反映,是⼈类认识世界和⼈类本身的重要源泉。“图”是物体反射或透射光的分布,“像“是⼈的视觉系统所接受的图在⼈脑中所形版的印象或认识,照⽚、绘画、剪贴画、地图、书法作品、⼿写汉学、传真、卫星云图、影视画⾯、X光⽚、脑电图、⼼电图等都是图像。—姚敏. 数字图像处理:机械⼯业出版社,2014年。

1.2 模拟图像和数字图像
图像起源于1826年前后法国科学家Joseph Nicéphore Niépce发明的第一张可永久保存的照片,属于模拟图像(又称连续图像,通过光、电等物理量的强弱变化记录图像亮度信息,呈连续变换特征),因模拟信号易受干扰,如今已基本被数字图像替代。第一次世界大战后(1921年),美国科学家发明Bartlane System,实现了首幅数字图像的跨洋传输——该图像亮度用离散数值表示,被编码为5个灰度级,发送端以打孔带记录并借海底电缆传至纽约,接收端用特殊打印机恢复成图像。

1950年左右,计算机被发明,数字图像处理学科正式诞⽣。
模拟图像和数字图像的对⽐,我们可以看⼀下:👇

我们学的图像处理,其实是数字图像处理,也就是计算机图像处理。
缺图
2.数字图像的表示
2.1 位数
计算机采⽤0/1编码的系统,数字图像也是利⽤0/1来记录信息,我们平常接触的图像都是8位数图像,包含0~255灰度,其中0,代表最⿊,1,表示最白。

⼈眼对灰度更敏感⼀些,在16位到32位之间。

2.2 图像的分类
数字图像按色彩/亮度信息的复杂度,主要分为三类:
①二值图:二维矩阵仅由0、1构成(“0”代表黑、“1”代表白),像素取值仅两种可能,计算机中以1个二进制位存储,常用于文字、线条图的扫描识别(OCR)及掩膜图像存储;
缺图
②灰度图:每个像素仅一个采样颜色,显示从最暗黑到最亮白的灰度(黑白间有多级颜色深度),区别于只有黑白两色的“黑白图像”,多由可见光内测量的像素亮度生成,用于显示的灰度图常以8位非线性尺度保存(含256级灰度,16位则达65536级);
缺图
③彩色图:每个像素由红(R)、绿(G)、蓝(B)三分量表示(分量值0-255),需通过三个M×N的二维矩阵分别存储各像素的R、G、B分量,数据类型多为8位无符号整形,通常用于表示和存放真彩色图像。
总结
图像是什么
图:物体反射或透射光的分布
像:⼈的视觉系统所接受的图在⼈脑中所形版的印象或认识模拟图像和数字图像
模拟图像:连续存储的数据,数字图像:分级存储的数据数字图像
位数:图像的表示,常⻅的就是8位
分类:⼆值图像,灰度图像和彩⾊图像
2.OpenCV简介和安装方法
前言
1.OpenCV是什么

OpenCV是⼀款由Intel公司俄罗斯团队发起并参与和维护的⼀个计算机视觉处理开源软件库,支持与计算机视觉和机器学习相关的众多算法,并且正在日益扩展。
OpenCV的优势: 👇
1.编程语⾔
- OpenCV基于C++实现,同时提供python, Ruby, Matlab等语⾔的接口。 OpenCV-Python是OpenCV的Python API,结合了OpenCV C++ API和Python语⾔的最佳特性。
2.跨平台
- 可以在不同的系统平台上使⽤,包括Windows,Linux,OS X,Android和 iOS。基于CUDA和OpenCL的⾼速GPU操作接⼝也在积极开发中
3.活跃的开发团队
4.丰富的API
- 完善的传统计算机视觉算法,涵盖主流的机器学习算法,同时添加了对深度学习的支持。
2.OpenCV-Python
OpenCV-Python是⼀个Python绑定库,旨在解决计算机视觉问题。
Python是由Guido van Rossum开发的通用编程语言,因简单性和代码可读性迅速流行,能让程序员用更少代码行表达思想且不降低可读性;虽比C/C++慢,但可通过C/C++轻松扩展——将计算密集型代码写在C/C++中并封装为Python模块,既保留C/C++的运行速度(后台实际执行C++代码),又保持Python的易写性。OpenCV-Python正是原始OpenCV C++实现的Python包装器,它依托高度优化且具MATLAB风格语法的Numpy库(所有OpenCV数组结构均转为Numpy数组),还便于与SciPy、Matplotlib等其他Numpy生态库集成。
3.OpenCV的部署
安装OpenCV之前需要先安装numpy, matplotlib。但是如果你安装了anaconda,那么你就不需要安装numpy, matplotlib了。而且opencv在anaconda中已经内置了。
如果没有,就在anaconda中的命令行中执行下面的命令:👇
conda config --add channels https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/free/
conda config --add channels https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/main/
conda config --set show_channel_urls yes
conda install -c conda-forge opencv安装好后,可以在.py文件中测试一下:👇
import cv2
print(cv2.__version__)
至此,OpenCV安装完成。
3. OpenCv的模块
前言
1.OpenCV的模块
下图列出了OpenCV中包含的各个模块:👇

OpenCV中最基础的模块为core、highgui、imgproc,本课程主要围绕这三个模块展开,具体如下:
- core模块:实现最核心的数据结构及基本运算,如绘图函数、数组操作相关函数等; 👈 ❤️
- highgui模块:实现视频与图像的读取、显示、存储等接口; 👈 ❤️
- imgproc模块:实现图像处理的基础方法,包括图像滤波、几何变换、平滑、阈值分割、形态学处理、边缘检测、目标检测、运动分析和对象跟踪。 👈 ❤️
此外,OpenCV还针对图像处理更高层次的方向及应用提供了其他模块:
- features2d模块:用于提取图像特征及特征匹配; 👈 ❤️
- nonfree模块:实现部分专利算法(如SIFT特征);
- objdetect模块:实现目标检测功能,包括经典的人脸检测(基于Haar、LBP特征)、行人/汽车等目标检测(基于HOG特征),分类器采用级联分类(Cascade Classification)和隐式SVM(Latent SVM)等;
- stitching模块:实现图像拼接功能;
- FLANN模块(快速近似最近邻搜索库):包含快速近似最近邻搜索(FLANN)与聚类算法;
- ml模块(机器学习模块):支持SVM、决策树、Boosting等算法;
- photo模块:包含图像修复与图像去噪两部分;
- video模块:针对视频处理,如背景分离、前景检测、对象跟踪等。
- calib3d模块:包含多个用于相机校准和对极几何计算的算法;
- G-API:包含超高效的图像处理pipeline引擎
4. OpenCV基本操作1
前言
学习目标: ✏️
- 掌握图像的读取和保存⽅法
- 能够使⽤OpenCV在图像上绘制⼏何图形
- 能够访问图像的像素
- 能够获取图像的属性,并进⾏通道的分离和合并
- 能够实现颜⾊空间的变换
1.图像的读取和保存
- 读取图像
import cv2
img = cv2.imread('img.jpg') # 读取图像, 第一个参数是文件名, 第二个参数是读取模式, 默认是cv2.IMREAD_COLOR- 保存图像
cv2.imwrite('img.jpg', img) # 第一个参数是文件名,第二个参数是图像2.图像的显示
cv2.imshow('img', img) # 显示图像,第一个参数是窗口名称,第二个参数是图像
cv2.waitKey(0) # 等待按键
cv2.destroyAllWindows() # 关闭所有窗口3.图像的绘制
import numpy as np
import cv2 as cv
import matplotlib.pyplot as plt
# 创建一个空白的图像
img = np.zeros((512, 512, 3), np.uint8) # 创建一个512x512的三通道图像, 每个通道的值是0
# 绘制直线
cv.line(img, (0, 0), (511, 511), (255, 0, 0), 5) # 绘制一条从(0, 0)到(511, 511)的直线, 颜色为蓝色, 线宽为5
# 绘制矩形
cv.rectangle(img, (384, 0), (510, 128), (0, 255, 0), 3) # 绘制一个左上角为(384, 0), 右下角为(510, 128)的矩形, 颜色为绿色, 线宽为3
# 绘制圆形
cv.circle(img, (447, 63), 63, (0, 0, 255), -1) # 绘制一个圆心为(447, 63), 半径为63的圆, 颜色为红色, 填充
# 往图像上写字
cv.putText(img, 'OpenCV', (10, 500), cv.FONT_HERSHEY_SIMPLEX, 4, (255, 255, 255), 2, cv.LINE_AA) # 在图像上写文字, 第一个参数是图像, 第二个参数是文字内容, 第三个参数是文字的左下角坐标, 第四个参数是字体, 第五个参数是字体大小, 第六个参数是文字颜色, 第七个参数是文字粗细, 第八个参数是文字的线条类型
# 显示图像
cv.imshow('yangeit', img)
cv.waitKey(0)
cv.destroyAllWindows()
# 保存图像
cv.imwrite('yangeit.png', img)
3.访问图像的像素 获得图像的属性
import numpy as np
import cv2 as cv
# 读取图像(需确保路径下存在目标文件)
img = cv.imread('yangeit.png')
# 获取某个像素点的BGR值(注:原代码中"1θθ"应为"100",numpy索引不支持"θ"字符)
px = img[100, 100]
# 仅获取蓝色通道的强度值(OpenCV默认读取为BGR格式,通道0=蓝、1=绿、2=红;原代码"θ"修正为"0")
blue = img[100, 100, 0]
# 修改某个位置的像素值为白色(BGR=[255,255,255]对应白色)
img[100, 100] = [255, 255, 255]
# 获取图像的属性
print(img.shape) # 输出图像形状:(行数, 列数, 通道数),彩色图通道数为3
print(img.size) # 输出图像总像素数:行数×列数×通道数
print(img.dtype) # 输出图像数据类型(OpenCV默认读取为uint8,即8位无符号整数)
# 显示图像
cv.imshow('yangeit', img) # 创建窗口并显示图像
cv.waitKey(0) # 等待任意键按下(参数为0时无限等待)
cv.destroyAllWindows() # 关闭所有OpenCV创建的窗口
4.通道的分离和合并和颜⾊空间的变换
有时需要在B,G,R通道图像上单独工作。在这种情况下,需要将BGR图像分割为单个通道。或者在其他情况下,可能需要将这些单独的通道合并到BGR图像。你可以通过以下⽅式完成。
OpenCV中有150多种颜⾊空间转换⽅法。最⼴泛使⽤的转换⽅法有两种, BGR--->Gray和BGR-->HSV。
BGR:蓝色通道、绿色通道、红色通道 转为 Gray:灰度图像
BGR:蓝色通道、绿色通道、红色通道 转为 HSV:色调通道、饱和度通道、明度通道
为什么要转成HSV呢?因为HSV更符合我们人类的视觉感知,比如在图像处理中,我们经常要判断图像的色调,如果用BGR的话,我们得先判断B、G、R的值,然后取最大值,这样太麻烦了,直接用HSV的色调通道,就可以直接判断了。
import cv2
import numpy as np
# 读取图像
img = cv2.imread('yangeit.png')
# 分离通道
b, g, r = cv2.split(img)
# 合并通道
img = cv2.merge((b, g, r))
# 转换为灰度图
gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY) # 转换为灰度图
# 显示
cv2.imshow('gray', gray)
cv2.waitKey(0)
cv2.destroyAllWindows()
# 转成HSV
hsv = cv2.cvtColor(img, cv2.COLOR_BGR2HSV) # 转换为HSV图
# 将颜色的饱和度提高50%
hsv[:, :, 1] = hsv[:, :, 1] * 1.5
hsv[:, :, 1][hsv[:, :, 1] > 255] = 255 # 防止超过255
# 显示
cv2.imshow('hsv', hsv)
cv2.waitKey(0)
cv2.destroyAllWindows()5. OpenCV基本操作2
前言
学习目标:了解图像的加法、混合操作
1.图像的加法
你可以使⽤OpenCV的cv.add()函数把两幅图像相加,或者可以简单地通过numpy操作添加两个图像,如res = img1 + img2。两个图像应该具有相同的大⼩和类型,或者第二个图像可以是标量值。
注意: OpenCV加法和Numpy加法之间存在差异。OpenCV的加法是饱和操作,⽽Numpy添加是模运算。
饱和操作:当两个数相加超过了数值范围的最大值时,就把这个数值设置为最大值。比如:255+1=255
模运算:当两个数相加超过了数值范围的最大值时,就把这个数值设置为最小值。比如:255+1=0
代码演示:👇
import numpy as np
import cv2 as cv
x = np.uint8([[250], [0], [0], [0]]) # 确保是uint8类型
y = np.uint8([[10], [0], [0], [0]]) # 确保是uint8类型
# 饱和操作
print(cv.add(x, y)) #OpenCV使用饱和运算 250 + 10 = 260,因为260 > 255(uint8最大值),所以限制为255
# 模运算
print(x + y) #NumPy使用模运算 250 + 10 = 260 260 % 256 = 4(因为是uint8,对256取模)这种差别在你对两幅图像进⾏加法时会更加明显。OpenCV 的结果会更好⼀点。所以我们尽量使⽤ OpenCV 中的函数。

import numpy as np
import cv2 as cv
import matplotlib.pyplot as plt
# 1. 读取图像(请确保view.jpg和rain.jpg存在于当前目录)
img1 = cv.imread("view.jpg") # 图像1(BGR格式)
img2 = cv.imread("rain.jpg") # 图像2(BGR格式)
# 验证图像是否成功加载
if img1 is None or img2 is None:
raise FileNotFoundError("无法加载图像文件,请检查路径")
# 2. 加法操作(两种方式对比)
img3 = cv.add(img1, img2) # OpenCV加法:饱和运算(超过255取255)
img4 = img1 + img2 # numpy直接加法:模运算(超过255会取模)
# 3. 图像显示(Matplotlib需要RGB格式,故使用[:,:,::-1]转换BGR→RGB)
fig, axes = plt.subplots(nrows=1, ncols=2, figsize=(10, 8), dpi=100)
axes[0].imshow(img3[:, :, ::-1]) # 显示OpenCV加法结果
axes[0].set_title("cv.add()加法\n(饱和运算)")
axes[1].imshow(img4[:, :, ::-1]) # 显示numpy加法结果
axes[1].set_title("直接相加\n(模运算)")
plt.tight_layout() # 自动调整子图间距
plt.show()
2.图像的混合
图像混合是另一个有趣的操作,需要两个具有相同⼤⼩的图像。结果图像中的像素强度是⽤以下公式计算的:
g(x) = (1-α)f(x) + αg(x)
通过修改α的值,你可以控制两个图像的混合程度,非常酷炫!!
现在我们将图像1和图像2混合,图1的权重是0.7,图2的权重是0.3。通过cv.addWeighted()函数实现。
import numpy as np
import cv2 as cv
import matplotlib.pyplot as plt
plt.rcParams['font.sans-serif']=['SimHei'] #用来正常显示中文标签
plt.rcParams['axes.unicode_minus']=False #用来正常显示负
# 1. 读取图像(请确保view.jpg和rain.jpg存在于当前目录)
img1 = cv.imread("./img/view.png") # 图像1(BGR格式)
img2 = cv.imread("./img/rain.png") # 图像2(BGR格式)
# 2. 图像混合
alpha = 0.7 # 图像1的权重
beta = 1 - alpha # 图像2的权重
img3 = cv.addWeighted(img1, alpha, img2, beta, 0) # 图像混合
# 3. 图像显示(Matplotlib需要RGB格式,故使用[:,:,::-1]转换BGR→RGB)
fig, axes = plt.subplots(nrows=1, ncols=2, figsize=(10, 8), dpi=100)
axes[0].imshow(img3[:, :, ::-1]) # 显示混合结果
axes[0].set_title("图像混合\n(α=0.7, β=0.3)")
plt.tight_layout() # 自动调整子图间距
plt.show()
总结
课堂作业
- 图像加法:将两幅图像加载⼀起
cv.add() - 图像的混合:将两幅图像按照不同的⽐例进⾏混合
cv.addweight()
注意 :这⾥都要求两幅图像是相同的⼤⼩和类型
