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. fxfy(可选):沿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())。

关键特性

  1. 点对要求

    • 需要 精确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)。

核心特性

  1. 透视变换矩阵

    • 需通过 cv2.getPerspectiveTransform() 或手动计算得到3×3矩阵。

  2. 插值方法

    • cv2.INTER_LINEAR(默认):平衡速度与质量。

    • cv2.INTER_CUBIC:高质量,适合放大。

    • cv2.INTER_NEAREST:速度快但锯齿明显。

  3. 边界处理

    • 默认填充黑色(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()

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/web/76554.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

智能运维新范式

在制造业、设备制造、工业物联网等领域,“服务周期长、响应效率低” 始终是产品运维的痛点 —— 设备故障突发时,工程师千里奔赴现场的耗时耗力;非计划停机带来的生产损失;客户对服务体验的更高期待…… 传统运维模式早已难以适应…

实现定时发送邮件,以及时间同步

定时发送邮件 部署邮件服务 查看有没有安装mailx,安装了 [root192 ~]# rpm -q mailx mailx-12.5-43.fc38.x86_64去网易拿一下授权码,写到配置文件里 vim /etc/mail.rcset fromxxxxxxx163.com set smtpsmtp.163.com set smtp-auth-userxxxxxxx163.com set smtp-auth-passwor…

状态模式:有限状态机在电商订单系统中的设计与实现

状态模式:有限状态机在电商订单系统中的设计与实现 一、模式核心:用状态切换驱动行为变化 在电商订单系统中,订单状态会随着用户操作动态变化:「已创建」的订单支付后变为「已支付」,发货后变为「已发货」&#xff0…

ubuntu 24.02部署java web服务

ubuntu 24.02 版本推荐使用jdk 21版本部署java web服务,开发后先使用sudo java -jar xxx.jar验证运行结果。 jdk安装:sudo apt install openjdk-21-jdk-headless 编辑服务文本 [Unit] DescriptionWebMgr Java Application Afternetwork.target mysql.…

深入浅出:LDAP 协议全面解析

在网络安全和系统管理的世界中,LDAP(轻量级目录访问协议,Lightweight Directory Access Protocol)是一个不可忽视的核心技术。它广泛应用于身份管理、认证授权以及目录服务,尤其在企业级环境中占据重要地位。本文将从基…

AI书籍大模型微调-基于亮数据获取垂直数据集

大模型的开源,使得每位小伙伴都能获得AI的加持,包括你可以通过AIGC完成工作总结,图片生成等。这种加持是通用性的,并不会对个人的工作带来定制的影响,因此各个行业都出现了垂直领域大模型。 垂直大模型是如何训练出来…

【2025软考高级架构师】——计算机系统基础(7)

摘要 本文主要介绍了计算机系统的组成,包括硬件和软件两大部分。硬件由处理器、存储器、总线、接口和外部设备等组成,软件则涵盖系统软件和应用软件。文章还详细阐述了冯诺依曼计算机的组成结构,包括 CPU、主存储器、外存等,并解…

AI大模型之模型幻觉

模型幻觉(Model Hallucination)是大模型生成内容时脱离事实、虚构信息的一种现象,尤其在语言模型、图像生成模型等中较为常见。为了更深入地理解这一现象,我们可以将其分为两个维度进行分析:内在幻觉(Intrinsic Hallucination) 和 外在幻觉(Extrinsic Hallucination)。…

spring Ai---向量知识库(一)

在一些垂直领域以及公司内部信息相关或者实时性相关的大模型应用,就无法直接使用chatGPT。 这个时候,向量知识库就进入了。 通过坐标向量最接近的即为匹配相关答案。 向量模型定义:将文档向量化,保证内容越相似的文本,…

Viper配置管理笔记

一、什么是 Viper? Viper 是 Go 语言的一个强大工具,就像一个超级管家,专门负责帮你打理程序的各种配置。它能把配置文件(比如 JSON、YAML、TOML 等格式)里的内容读出来,还能监控配置文件的变化&#xff0…

实现对象之间的序列化和反序列化

1.什么是序列化? 在项目的开发中,为了让前端更好的分析后端返回的结果,我们一般会将返回的信息进行序列化,序列化就是将返回对象的状态信息转换为一种标准化的格式,方便在网络中传输也方便打印日志时号观察&#xff0…

ThreadLocal - 原理与应用场景详解

ThreadLocal 的基础概念 在 Java 的多线程世界里,线程之间的数据共享与隔离一直是一个关键话题。如果处理不当,很容易引发线程安全问题,比如数据混乱、脏读等。而 ThreadLocal 这个工具类,就像是为线程量身定制的 “私人储物柜”…

iwebsec靶场 文件包含关卡通关笔记11-ssh日志文件包含

目录 日志包含 1.构造恶意ssh登录命令 2.配置ssh日志开启 (1)配置sshd (2)配置rsyslog (3)重启服务 3.写入webshell木马 4.获取php信息渗透 5.蚁剑连接 日志包含 1.构造恶意ssh登录命令 ssh服务…

Diamond软件的使用--(4)搭建Modelsim仿真库

使用Modelsim仿真的原因 由于diamond自带的仿真软件Active-HDL需要另一套Lisence,所以我们使用第三方仿真软件Modelsim来进行仿真。 Modelsim10.5下载链接如下:https://pan.baidu.com/s/1G9699ocWm1UTqK2yS2igyQ 提取码:lewa 一、Lattice仿…

2025年4月19日,四月第三周,C++,字符串数组答案解析

答案与解析 1. 输出字符串数组所有元素 cpp 复制 下载 #include <iostream> using namespace std;int main() {string arr[] = {"apple", "banana", "cherry"};int n = sizeof(arr)/sizeof(arr[0]); // 计算数组长度for (int i = 0; …

C语言之高校学生信息快速查询系统的实现

&#x1f31f; 嗨&#xff0c;我是LucianaiB&#xff01; &#x1f30d; 总有人间一两风&#xff0c;填我十万八千梦。 &#x1f680; 路漫漫其修远兮&#xff0c;吾将上下而求索。 C语言之高校学生信息快速查询系统的实现 目录 任务陈述与分析 问题陈述问题分析 数据结构设…

【网络篇】TCP vs UDP底层区别+网络编程概念

大家好呀 我是浪前 今天讲解的是网络篇的第三章&#xff1a;网络编程概念和TCP&UDP的区别 网络编程概念TCP和UDP的区别 跨主机通信:网络编程插座&#xff1a;网络编程的本质&#xff1a; 网络编程的重要概念&#xff1a;客户端和服务器&#xff1a; 客户端和服务器的交互模…

EMIF详解

一、EMIF的基本定义 EMIF&#xff08;External Memory Interface&#xff0c;外部存储器接口&#xff09; 是嵌入式处理器&#xff08;如DSP、FPGA、SoC&#xff09;用于连接外部存储器的专用硬件接口模块&#xff0c;负责管理处理器与存储器之间的地址/数据总线、控制信号及时…

Keil MDK 编译问题:function “HAL_IncTick“ declared implicitly

问题与处理策略 问题描述 ..\..\User\stm32f1xx_it.c(141): warning: #223-D: function "HAL_IncTick" declared implicitlyHAL_IncTick(); ..\..\User\stm32f1xx_it.c: 1 warning, 0 errors问题原因 在 stm32f1xx_it.c 文件中调用了 HAL_IncTick()&#xff0c;但…

Java Web项目(一)

框架 java web项目总工分为两部分&#xff1a;客户端&#xff08;前端&#xff09;和服务端&#xff08;后端&#xff09; 客户端发起请求&#xff0c;服务端接受请求并进行处理 发起请求的方式&#xff1a;from表单、jQuery ajax from表单 造成全局的变化&#xff0c;在发…