OpenCV day5
函数内容接上文:OpenCV day4-CSDN博客
目录
9.cv2.adaptiveThreshold():
10.cv2.split():
11.cv2.merge():
12.cv2.add():
13.cv2.subtract():
14.cv2.multiply():
15.cv2.divide():
16.cv2.bitwise_and():
17.cv2.bitwise_or():
18.cv2.inRange():
19.cv2.getRotationMatrix2D():
21.cv2.flip():
22.cv2.resize():
23.cv2.getPerspectiveTransform():
24.cv2.warpPerspective():
透视变换练习1:
透视变换练习2:
9.cv2.adaptiveThreshold():
| 功能 | 对图像进行局部自适应阈值化,解决光照不均问题,生成二值图像。 |
| 参数 | 1. src:输入灰度图像(单通道)。2. maxValue:满足条件时赋予的像素值(如255)。3. adaptiveMethod:阈值计算方式(ADAPTIVE_THRESH_MEAN_C 或 ADAPTIVE_THRESH_GAUSSIAN_C)。4. thresholdType:二值化类型(THRESH_BINARY 或 THRESH_BINARY_INV)。5. blockSize:局部邻域大小(奇数,如11)。6. C:从均值/高斯均值中减去的常数(用于微调阈值)。 |
| 返回值 | 二值化后的图像(numpy.ndarray)。 |
关键区别:
-
普通阈值(如
cv2.threshold):全局统一阈值。 -
自适应阈值:每个像素的阈值根据周围像素动态计算,适合光照不均的图像。
10.cv2.split():
| 功能 | 将多通道图像(如BGR)拆分为单通道数组。 |
| 参数 | src:输入的多通道图像(numpy.ndarray,如BGR格式的3通道图像)。 |
| 返回值 | 返回单通道数组的元组(如BGR图像返回(B, G, R)三个通道)。 |
11.cv2.merge():
| 功能 | 将多个单通道数组合并成一个多通道图像(如合并 B、G、R 通道成彩色图像)。 |
| 参数 | mv:一个包含单通道数组的列表或元组(如 [B, G, R])。 |
| 返回值 | 合并后的多通道图像(numpy.ndarray)。 |
关键点:
-
通常与
cv2.split()配合使用,用于通道分离后的重新合并。 -
输入的通道顺序决定输出图像的格式(如
[R, G, B]会生成 RGB 图像,而 OpenCV 默认是 BGR)。
12.cv2.add():
| 功能 | 对两张图像(或图像与标量)进行饱和加法运算(像素值超过最大值时截断)。 |
| 参数 | 1. src1:第一张输入图像或标量值。2. src2:第二张输入图像或标量值。3. mask(可选):掩膜,指定操作区域。4. dtype(可选):输出数据类型(如 cv2.CV_8U)。 |
| 返回值 | 加法结果图像(numpy.ndarray)。 |
关键特性:
-
饱和运算:结果超出范围时自动截断(如
uint8超过 255 则取 255)。 -
与
numpy.add()区别:NumPy 是模运算(256 → 0),而 OpenCV 是截断(256 → 255)。
13.cv2.subtract():
| 功能 | 对两张图像(或图像与标量)进行饱和减法运算(像素值低于最小值时截断为0)。 |
| 参数 | 1. src1:被减图像或标量值。2. src2:减数图像或标量值。3. mask(可选):掩膜,指定操作区域。4. dtype(可选):输出数据类型(如 cv2.CV_8U)。 |
| 返回值 | 减法结果图像(numpy.ndarray)。 |
14.cv2.multiply():
| 功能 | 对两张图像(或图像与标量)进行饱和乘法运算(像素值超过最大值时截断)。 |
| 参数 | 1. src1:第一张输入图像或标量值。2. src2:第二张输入图像或标量值。3. scale(可选):缩放因子(默认1.0)。4. dtype(可选):输出数据类型(如 cv2.CV_32F)。 |
| 返回值 | 乘法结果图像(numpy.ndarray)。 |
15.cv2.divide():
| 功能 | 对两张图像(或图像与标量)进行除法运算(支持饱和处理和类型转换)。 |
| 参数 | 1. src1:被除数图像或标量值。2. src2:除数图像或标量值。3. scale(可选):缩放因子(默认1.0)。4. dtype(可选):输出数据类型(如 cv2.CV_32F)。 |
| 返回值 | 除法结果图像(numpy.ndarray)。 |
16.cv2.bitwise_and():
| 功能 | 对两张图像(或图像与标量)进行按位与运算(像素级二进制AND操作)。 |
| 参数 | 1. src1:第一张输入图像或标量值。2. src2:第二张输入图像或标量值。3. mask(可选):掩膜,指定操作区域(仅对掩膜非零区域操作)。4. dst(可选):输出数组。 |
| 返回值 | 按位与结果图像(numpy.ndarray)。 |
关键特性:
-
二进制操作:对每个像素的二进制值逐位进行AND运算(同1得1,否则得0)。
-
掩膜应用:可通过
mask参数限定操作区域(非掩膜区域输出为0)。 -
典型用途:图像掩膜提取、ROI操作、位平面分析。
17.cv2.bitwise_or():
| 功能 | 对两张图像(或图像与标量)进行按位或运算(像素级二进制OR操作)。 |
| 参数 | 1. src1:第一张输入图像或标量值。2. src2:第二张输入图像或标量值。3. mask(可选):掩膜,指定操作区域(仅对掩膜非零区域操作)。4. dst(可选):输出数组。 |
| 返回值 | 按位或结果图像(numpy.ndarray)。 |
对比其他位操作:
-
cv2.bitwise_and():逻辑与(交集) -
cv2.bitwise_or():逻辑或(并集) -
cv2.bitwise_xor():逻辑异或(差异) -
cv2.bitwise_not():逻辑非(取反)
18.cv2.inRange():
| 功能 | 检查图像中像素值是否位于指定范围内,生成二值掩膜(符合范围=255,否则=0)。 |
| 参数 | 1. src:输入图像(单通道或多通道)。2. lowerb:范围下限(标量或数组,如 [min_B, min_G, min_R])。3. upperb:范围上限(标量或数组,如 [max_B, max_G, max_R])。 |
| 返回值 | 二值掩膜图像(numpy.ndarray,符合范围=255,否则=0)。 |
关键特性:
-
多通道支持:可直接处理彩色图像(需为
lowerb和upperb提供每个通道的阈值)。 -
典型用途:颜色过滤、背景分割、对象检测(如提取绿色区域)。
19.cv2.getRotationMatrix2D():
| 功能 | 生成一个 2D旋转矩阵,用于图像的旋转操作(围绕指定中心点旋转)。 |
| 参数 | 1. center:旋转中心坐标 (x, y)。2. angle:旋转角度(顺时针为正,单位:度)。3. scale:缩放因子(1.0表示不缩放)。 |
| 返回值 | 2×3的仿射变换矩阵(numpy.ndarray,可直接用于 cv2.warpAffine())。 |
关键特性:
-
旋转方向:角度为正值时顺时针旋转,负值逆时针旋转。
-
中心点:旋转围绕该点进行,若设为图像中心则保持旋转后内容在视野内。
-
缩放:可同时缩放图像(如
scale=0.5旋转并缩小一半)。
| 功能 | 对图像应用仿射变换(旋转、平移、缩放、倾斜等线性变换)。 |
| 参数 | 1. src:输入图像。2. M:2×3仿射变换矩阵(如 cv2.getRotationMatrix2D() 生成的矩阵)。3. dsize:输出图像尺寸 (width, height)。4. flags(可选):插值方法(如 cv2.INTER_LINEAR)。5. borderMode(可选):边界填充方式(如 cv2.BORDER_CONSTANT)。6. borderValue(可选):填充边界时的颜色(默认为黑色)。 |
| 返回值 | 变换后的图像(numpy.ndarray)。 |
关键特性:
-
仿射变换:保持直线和平行性,适用于旋转、平移、缩放等操作。
-
插值方法:推荐
cv2.INTER_LINEAR(平衡速度与质量)或cv2.INTER_CUBIC(高质量)。 -
边界处理:超出原图范围的区域默认填充黑色,可通过
borderValue修改(如填充白色)。
21.cv2.flip():
| 功能 | 对图像进行翻转操作(水平、垂直或双向翻转)。 |
| 参数 | 1. src:输入图像。2. flipCode:翻转方向控制:• 0:垂直翻转(沿X轴)• 1:水平翻转(沿Y轴)• -1:双向翻转(先水平后垂直) |
| 返回值 | 翻转后的图像(numpy.ndarray)。 |
关键特性:
-
原地操作:不修改原图,返回新图像。
-
无插值:直接像素映射,速度极快。
-
多通道支持:彩色图像(BGR/RGB)也可直接翻转。
22.cv2.resize():
| 项目 | 说明 |
|---|---|
| 功能 | 调整图像尺寸(放大或缩小)。 |
| 参数 | 1. src:输入图像。2. dsize:目标尺寸 (width, height)。3. fx, fy(可选):沿x/y轴的缩放因子(与dsize二选一)。4. interpolation(可选):插值方法(默认cv2.INTER_LINEAR)。 |
| 返回值 | 缩放后的图像(numpy.ndarray)。 |
常用插值方法:
-
cv2.INTER_NEAREST:最近邻(速度快,质量低)。 -
cv2.INTER_LINEAR:双线性(默认,平衡速度与质量)。 -
cv2.INTER_CUBIC:双三次(高质量,适合放大)。 -
cv2.INTER_AREA:区域插值(适合缩小)。
注意:
-
dsize参数格式为(宽度, 高度),与 numpy 的(行, 列)相反。 -
同时指定
dsize和fx/fy时,dsize优先生效。
23.cv2.getPerspectiveTransform():
| 功能 | 计算 透视变换矩阵(从4个源点映射到4个目标点的3×3变换矩阵)。 |
| 参数 | 1. src:源图像中4个点的坐标(np.float32格式,形如[[x1,y1],...,[x4,y4]])。2. dst:目标图像中对应的4个点坐标(格式同src)。 |
| 返回值 | 3×3透视变换矩阵(numpy.ndarray,用于cv2.warpPerspective())。 |
关键特性
-
点对要求:
-
需要 精确4组对应点(不能多或少)。
-
点顺序需一致(如左上、右上、左下、右下)。
-
注意事项
-
输入点类型:必须是
np.float32,否则报错。 -
点顺序一致性:若源点与目标点顺序不匹配,会导致扭曲异常。
-
与仿射变换区别:透视变换需要4个点(仿射变换仅需3个点)。
24.cv2.warpPerspective():
| 功能 | 对图像应用透视变换(将图像投影到新的视角平面,如倾斜矫正、视角转换)。 |
| 参数 | 1. src:输入图像。2. M:3×3透视变换矩阵(来自cv2.getPerspectiveTransform())。3. dsize:输出图像尺寸 (width, height)。4. flags(可选):插值方法(如 cv2.INTER_LINEAR)。5. borderMode(可选):边界填充方式(如 cv2.BORDER_CONSTANT)。6. borderValue(可选):填充颜色(默认为黑色)。 |
| 返回值 | 透视变换后的图像(numpy.ndarray)。 |
核心特性
-
透视变换矩阵
-
需通过
cv2.getPerspectiveTransform()或手动计算得到3×3矩阵。
-
-
插值方法
-
cv2.INTER_LINEAR(默认):平衡速度与质量。 -
cv2.INTER_CUBIC:高质量,适合放大。 -
cv2.INTER_NEAREST:速度快但锯齿明显。
-
-
边界处理
-
默认填充黑色(
borderValue=(0, 0, 0)),可设置为白色或其他颜色。
-
透视变换练习1:
import cv2
import numpy as npimg = cv2.imread('../images/youhua.png')
cv2.imshow("original image", img)
h, w, _ = img.shape# 源图像中四个角点
src = np.array([[170, 140],[630, 40],[80, 500],[660, 560]], dtype="float32")# 目标图像中四个点
dst = np.array([[50, 10],[700, 10],[50, 550],[700, 550]], dtype="float32")# 计算透视变换矩阵
M = cv2.getPerspectiveTransform(src, dst)# 指定背景为白色
per_img = cv2.warpPerspective(img, M, (w, h), borderValue=(255, 255, 255))cv2.imshow("perspective image", per_img)
cv2.waitKey(0)
cv2.destroyAllWindows()

透视变换练习2:
import cv2
import numpy as npimg = cv2.imread('../images/hello.png')
cv2.imshow("original image", img)
h, w, _ = img.shape# 源图像中四个角点
src = np.float32([[80, 240],[350, 120],[200, 430],[450, 258]])# 目标图像中四个点
dst = np.float32([[0, 0],[450, 0],[0, 330],[450, 330]
])# 计算透视变换矩阵
M = cv2.getPerspectiveTransform(src, dst)# 指定背景为白色
per_img = cv2.warpPerspective(img, M, (450, 330), borderValue=(255, 255, 255))cv2.imshow("perspective image", per_img)
cv2.waitKey(0)
cv2.destroyAllWindows()


相关文章:
OpenCV day5
函数内容接上文:OpenCV day4-CSDN博客 目录 9.cv2.adaptiveThreshold(): 10.cv2.split(): 11.cv2.merge(): 12.cv2.add(): 13.cv2.subtract(): 14.cv2.multiply(): 15.cv2.divide(): 1…...
基于Spring Boot+微信小程序的智慧农蔬微团购平台-项目分享
基于Spring Boot微信小程序的智慧农蔬微团购平台-项目分享 项目介绍项目摘要目录系统功能图管理员E-R图用户E-R图项目预览登录页面商品管理统计分析用户地址添加 最后 项目介绍 使用者:管理员、用户 开发技术:MySQLSpringBoot微信小程序 项目摘要 随着…...
WPF的发展历程
文章目录 WPF的发展历程引言起源与背景(2001-2006)从Avalon到WPF设计目标与创新理念 WPF核心技术特点与架构基础架构与渲染模型关键技术特点MVVM架构模式 WPF在现代Windows开发中的地位与前景当前市场定位与其他微软UI技术的关系未来发展前景 社区贡献与…...
Franka机器人ROS 2来袭:解锁机器人多元应用新可能
前言: 在机器人技术蓬勃发展的当下,每一次创新都可能为行业带来新的变革。2025年3月12日,Franka Robotics发布的Franka ROS 2软件包首次版本0.1.0,将著名的franka_ros软件包引入当前的ROS 2 LTS Humble Hawksbill,这一…...
树莓派5+Vosk+python实现语音识别
简介 Vosk是语音识别开源框架,支持二十种语言 - 中文,英语,印度英语,德语,法语,西班牙语,葡萄牙语,俄语,土耳其语,越南语,意大利语,荷…...
系统分析师知识点:访问控制模型OBAC、RBAC、TBAC与ABAC的对比与应用
在信息安全领域,访问控制是确保数据和资源安全的关键技术。随着信息系统复杂度的提高,访问控制技术也在不断演进,从早期简单的访问控制列表(ACL)发展到如今多种精细化的控制模型。本文将深入剖析四种主流的访问控制模型:基于对象的…...
Golang errors 包快速上手
文章目录 1.变量2.类型3.函数3.1 New3.2 Is简介函数签名核心功能示例代码使用场景注意事项小结 3.3 As简介函数签名核心功能示例代码使用场景注意事项小结 3.4 Unwrap简介函数签名核心功能使用示例使用场景注意事项小结 3.5 Join简介函数签名核心功能使用场景注意事项小结 4.小…...
数据结构——顺序表(C语言实现)
1.顺序表的概述 1.1 顺序表的概念及结构 在了解顺序表之前,我们要先知道线性表的概念,线性表,顾名思义,就是一个线性的且具有n个相同类型的数据元素的有限序列,常见的线性表有顺序表、链表、栈、队列、字符串等等。线…...
Qt Multimedia 库总结
Qt Multimedia 库总结 Qt Multimedia 库是 Qt 框架中用于处理多媒体内容的模块,支持音频、视频、摄像头和录音功能。它为开发者提供了跨平台的 API,适用于桌面、移动和嵌入式设备。本文将从入门到精通,逐步解析 Qt Multimedia 的核心功能、使…...
STP原理与配置以及广播风暴实验STP实验
学习目标 环路引起的问题 掌握STP的工作原理 掌握STP的基本配置 STP的配置 环路引起的问题 一、广播风暴(Broadcast Storm) 问题原理: 交换机对广播帧(如 ARP 请求、DHCP 发现报文)的处理方式是洪泛࿰…...
网络不可达network unreachable问题解决过程
问题:访问一个环境中的路由器172.16.1.1,发现ssh无法访问,ping发现回网络不可达 C:\Windows\System32>ping 172.16.1.1 正在 Ping 172.16.1.1 具有 32 字节的数据: 来自 172.16.81.1 的回复: 无法访问目标网。 来自 172.16.81.1 的回复:…...
力扣经典拓扑排序
207. 课程表(Course Schedule) 你这个学期必须选修 numCourses 门课程,记为 0 到 numCourses - 1 。 在选修某些课程之前需要一些先修课程。先修课程按数组 prerequisites 给出,其中 prerequisites[i] [ai, bi] ,表…...
Session与Cookie的核心机制、用法及区别
Python中Session与Cookie的核心机制、用法及区别 在Web开发中,Session和Cookie是两种常用的用于跟踪用户状态的技术。它们在实现机制、用途和安全性方面都有显著区别。本文将详细介绍它们的核心机制、用法以及它们之间的主要区别。 一、Cookie的核心机制与用法 1…...
【第16届蓝桥杯C++C组】--- 2025
hello呀,小伙伴们,这是第16届蓝桥杯第二道填空题,和第一道填空题一样也是十分基础的题目,有C语言基础基本都可以解,下面我讲讲我当时自己的思路和想法,如果你们有更优化的代码和思路,也可以分享…...
前端基础之《Vue(7)—生命周期》
一、什么是生命周期 1、生命周期 组件从“生”到“死”的全过程。 每一个组件都有生命周期。 2、生命周期四大阶段 创建阶段:beforeCreate、created 挂载阶段:beforeMount、mounted 更新阶段:beforeUpdate、updated 销毁阶段:be…...
C语言高频面试题——指针数组和数组指针
指针数组和数组指针是 C/C 中容易混淆的两个概念,以下是详细对比: 1. 指针数组(Array of Pointers) 定义:一个数组,其元素是 指针类型。语法:type* arr[元素个数]; 例如:int* ptr_a…...
Linux服务器配置Anaconda环境、Pytorch库(图文并茂的教程)
引言:为了方便后续新进组的 师弟/师妹 使用课题组的服务器,特此编文(ps:我导从教至今四年,还未招师妹) ✅ NLP 研 2 选手的学习笔记 笔者简介:Wang Linyong,NPU,2023级&a…...
Android端使用无障碍服务实现远程、自动刷短视频
最近在做一个基于无障碍自动刷短视频的APP,需要支持用任意蓝牙遥控器远程控制, 把无障碍服务流程大致研究了一下,从下面3个部分做一下小结。 1、需要可调整自动上滑距离和速度以适配不同的屏幕和应用 智能适配99%机型,滑动参数可…...
搭建用友U9Cloud ERP及UAP IDE环境
应用环境 Microsoft Windows 10.0.19045.5487 x64 专业工作站版 22H2Internet Information Services - 10.0.19041.4522Microsoft SQL Server 2019 - 15.0.2130.3 (X64)Microsoft SQL Server Reporing Services 2019 - 15.0.9218.715SQL Server Management Studio -18.6 laster…...
多模态大语言模型arxiv论文略读(二十九)
Temporal Insight Enhancement: Mitigating Temporal Hallucination in Multimodal Large Language Models ➡️ 论文标题:Temporal Insight Enhancement: Mitigating Temporal Hallucination in Multimodal Large Language Models ➡️ 论文作者:Li Su…...
Java开发中的设计模式之观察者模式详细讲解
观察者模式(Observer Pattern)是一种行为型设计模式,它定义了对象之间的一种一对多的依赖关系。当一个对象的状态发生改变时,所有依赖于它的对象都会自动收到通知并更新。这种模式在Java开发中非常常见,尤其是在事件驱…...
基于SpringAI Alibaba实现RAG架构的深度解析与实践指南
一、RAG技术概述 1.1 什么是RAG技术 RAG(Retrieval-Augmented Generation)检索增强生成是一种将信息检索技术与生成式AI相结合的创新架构。它通过以下方式实现智能化内容生成: 知识检索阶段:从结构化/非结构化数据源中检索相关…...
卷积神经网络(CNN)详解
文章目录 引言1.卷积神经网络(CNN)的诞生背景2.卷积神经网络(CNN)介绍2.1 什么是卷积神经网络?2.2 卷积神经网络(CNN)的基本特征2.2.1 局部感知(Local Connectivity)2.2.…...
element-plus添加暗黑模式
main.ts文件 //引入暗黑模式样式 import "element-plus/theme-chalk/dark/css-vars.css"; style.scss文件 // 设置默认主题色 :root {--base-menu-min-width: 80px;--el-color-primary-light-5: green !important;--route--view--background-color: #fff !import…...
【SF顺丰】顺丰开放平台API对接(注册、API测试篇)
1.注册开发者账号 注册地址:顺丰企业账户中心 2.登录开发平台 登录地址:顺丰开放平台 3.开发者对接 点击开发者对接 4.创建开发对接应用 开发者应用中“新建应用”创建应用,最多创建应用限制数量5个 注意:需要先复制保存生产校验…...
VisualSVN过期后的解决方法
作为一款不错的源代码管理软件,svn还是有很多公司使用的。在vs中使用svn,大家一般用的都是VisualSVN插件。在30天试用期过后,它就不能被免费使用了。下面给大家讲如何免费延长过期时间(自定义天数,可以设定一个很大的值…...
代码随想录算法训练营第二十一天
LeetCode题目: 93. 复原 IP 地址78. 子集90. 子集 II2364. 统计坏数对的数目 其他: 今日总结 往期打卡 93. 复原 IP 地址 跳转: 93. 复原 IP 地址 学习: 代码随想录公开讲解 问题: 有效 IP 地址 正好由四个整数(每个整数位于 0 到 255 之间组成,且不能…...
21. git apply
基本概述 git apply 的作用是:应用补丁文件 基本用法 1.命令格式 git apply [选项] <补丁文件>2.应用补丁 git apply patchfile.patch将补丁应用到工作目录,但不会自动添加到暂存区(需手动 git add) 常用选项 1.检查…...
DeepSeek智能时空数据分析(二):3秒对话式搞定“等时圈”绘制
序言:时空数据分析很有用,但是GIS/时空数据库技术门槛太高 时空数据分析在优化业务运营中至关重要,然而,三大挑战仍制约其发展:技术门槛高,需融合GIS理论、SQL开发与时空数据库等多领域知识;空…...
STM32学习2
一、OLED 1.1 OLED介绍 OLED(Organic Light Emitting Diode):有机发光二极管 OLED显示屏:性能优异的新型显示屏,具有功耗低、相应速度快、宽视角、轻薄柔韧等特点 0.96寸OLED模块:小巧玲珑、占用接口少…...
