OpenCV day5

news2025/4/22 18:45:38

函数内容接上文: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 np

img = 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 np

img = 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.coloradmin.cn/o/2340286.html

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

相关文章

基于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是语音识别开源框架,支持二十种语言 - 中文,英语,印度英语,德语,法语,西班牙语,葡萄牙语,俄语,土耳其语,越南语,意大利语,荷…

数据结构——顺序表(C语言实现)

1.顺序表的概述 1.1 顺序表的概念及结构 在了解顺序表之前,我们要先知道线性表的概念,线性表,顾名思义,就是一个线性的且具有n个相同类型的数据元素的有限序列,常见的线性表有顺序表、链表、栈、队列、字符串等等。线…

STP原理与配置以及广播风暴实验STP实验

学习目标 环路引起的问题 掌握STP的工作原理 掌握STP的基本配置 STP的配置 环路引起的问题 一、广播风暴(Broadcast Storm) 问题原理: 交换机对广播帧(如 ARP 请求、DHCP 发现报文)的处理方式是洪泛&#xff0…

网络不可达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] ,表…

【第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…

卷积神经网络(CNN)详解

文章目录 引言1.卷积神经网络(CNN)的诞生背景2.卷积神经网络(CNN)介绍2.1 什么是卷积神经网络?2.2 卷积神经网络(CNN)的基本特征2.2.1 局部感知(Local Connectivity)2.2.…

【SF顺丰】顺丰开放平台API对接(注册、API测试篇)

1.注册开发者账号 注册地址:顺丰企业账户中心 2.登录开发平台 登录地址:顺丰开放平台 3.开发者对接 点击开发者对接 4.创建开发对接应用 开发者应用中“新建应用”创建应用,最多创建应用限制数量5个 注意:需要先复制保存生产校验…

VisualSVN过期后的解决方法

作为一款不错的源代码管理软件,svn还是有很多公司使用的。在vs中使用svn,大家一般用的都是VisualSVN插件。在30天试用期过后,它就不能被免费使用了。下面给大家讲如何免费延长过期时间(自定义天数,可以设定一个很大的值…

DeepSeek智能时空数据分析(二):3秒对话式搞定“等时圈”绘制

序言:时空数据分析很有用,但是GIS/时空数据库技术门槛太高 时空数据分析在优化业务运营中至关重要,然而,三大挑战仍制约其发展:技术门槛高,需融合GIS理论、SQL开发与时空数据库等多领域知识;空…

STM32学习2

一、OLED 1.1 OLED介绍 OLED(Organic Light Emitting Diode):有机发光二极管 OLED显示屏:性能优异的新型显示屏,具有功耗低、相应速度快、宽视角、轻薄柔韧等特点 0.96寸OLED模块:小巧玲珑、占用接口少…