opencv图像处理详细讲

传统的计算机视觉框架:

SimpleCV

BoofCV

Dlib

JavaCV

深度学习计算机视觉框架

Caffe

Tensorflow

Pytorch

Paddlepaddle

Keras

深度视觉计算机视觉框架

OpenVINO

TensorRT

onnxruntime

Deepface

YOLO/DarkNet

mmdetection

Paddle-detection/seg/ocr

当前业界主流框架应用

计算机视觉方向:Halkon/VisionPro/Mil/OpenCV

深度学习方向: tensorflow/pytorch/paddlepaddle + openvino/tensorRT/onnxruntime

opencv应用

        import cv2 as cv   导入opencv支持

        import numpy as np    导入Numpy支持

        imread函数  读取图像

        imshow函数   显示图像

        加载图像的通道顺序

计算机图像理解

        

   

图像理解

        灰度图像 - 单通道

        彩色图像 - 三通道

图像色彩空间转换

        

图像色彩空间

         RGB色彩空间,设备独立

         HSV色彩空间,对计算机友好,区分各种色彩

         YCrC吧, Y分量表示信息, CrCb可以被压缩

         RGB是计算机显示器的标准支持色彩系统,RGB的取值范围0~255

         HSV取值范围H: 0~180, SV:0~255

图像色彩转换

        从一个色彩空间转换到另外一个色彩空间

        信息传递与损失

        过程可逆与不可逆

图像对象的创建与赋值

图像对象属性

        图像宽高 image.shape

        图像深度 image

        图像数据类型 image.dtype

        图像通道 image.shape

        如何加载不同通道的图像

OpenCV-Python支持的数据类型

        np.uint8

        np.float32

        np.int32

        np.int64

图像像素

理解像素

        像素实际大小:dpi x inches = 像素总数

        术语dpi: 每英寸的点数目, 96dpi - 针对打印

        术语ppi: 每英寸的像素数目 - 针对图像分辨率

灰度图像排序(单通道)

彩色图像排序(三通道)

像素访问与遍历

        像素便利本质就是numpy数组访问

        假设变量image

        获取图像维度信息: image.shape

        图像访问像素: image【row, col】

        图像赋值像素: image【row,  col】 = (b,g,r)

       

像素读写:

        读写像素(彩色图像):

        b ,g , r = image [ row, col ]

        image[row, col] = ( 255-b, 255-g, 255-r )

        

        读写像素(灰度图像):

        pv = image【row,col】

        image【row, col】 = 255 - pv

像素算术操作

        加法

        img1【row, col】 + img2[ row, col ] = dst[row, col ]

Mask参数

创建窗口函数

        

调整图像亮度

        RGB值表示亮度

        RGB(0,0,0)黑色        RGB(255,255,255)白色

        

通道分离与合并

        RGB/HSV彩色通道分离为单独通道

        争对不同通道使用不同阈值提取mask

        提取其中一个通道的信息

像素值统计-均值

        均值 - 单通道为例

        图像均值(5+3+4+9+6+7+8+2+3)/ 9 = 5.222

        图像应用mask之后的均值 (3+6+2)/3 = 3.6666

        

像素值统计-方差

方差用来衡量数据的离散程度,方差越大,数据的离散程度越高。

说明数据的分布越分散,像素值之间的差异性更大,图像的对比度可能会更加明显。方差较大的图像可能包含更多的细节和变化。

计算文本区域大小

函数计算文本区域大小函数

getTextSize (

        text,    #表示文本信息

        fontFace, #表示字体类型

        fontScale,  #表示字体大小

        thickness   #表示线宽

python中的随机数函数

Numpy中的随机函数

randiom.randint(low,high=None,size=None,dtype=int)

Low表低值, high表示高值, size表示维度, dtype表示类型

np.random.randint(256)

np.random.randint(0,256)  表示生成0~255个随机数,类型是int

随机噪声图

cv.randn(dst, mean, stddev) 生成目标图像dst、噪声均值mean、噪声方差stddev

数据转换

        Imread读入默认是uint8, 转换为float32,通过imshow显示之前, 必须归一化到【0~1】之间。

图像几何变换

        cv.warpAffine(src, M, dsizel dstl, flags[borderModel, borderValue]])-> dst

src表示输入图像,M表示2x3变换矩阵,dsize表示目标图像dst的大小,支持平移变换、放缩变换、旋转变换。

变换矩阵

放缩矩阵

        

旋转矩阵

        

获取旋转

旋转矩阵获取cv..getRotationMatric2D

Center表示旋转中心,angle表示度数,大于零表示逆时针旋转,scale表示放缩尺度大小

视频标准与格式

图像直方图

直方图均衡化

        作用:提升对比度、灰度图像支持

        作为一种图像增强技术,其目的是通过重新分布图像的像素值,使得图像的直方图更均匀,从而增强图像的对比度,使图像更加清晰和易于分析。这可以有效地增强图像的细节和纹理,改善图像的视觉效果。

        例如在医学图像处理中用于增强影像质量和凸显病变部位,还可以用于改善监控摄像头拍摄的图像质量,提高图像的清晰度和对比度。此外,直方图均衡化也常用于数字图书馆、印刷和出版领域的图像处理,以及在计算机视觉、模式识别和机器学习等领域中作为图像预处理的一项重要技木。

图像卷积

        卷积核也可以称为权重        

        均值卷积的核心思想是通过取周围像素的平均值来替代当前像素的值,从而减轻图像的噪声和细节,使得图像变得更加平滑。均值卷积通常用于图像降噪、模糊化处理以及图像特征提取等方面。

           

卷积核跟锚定位置

        

        锚定位置在想处理中是指用于确定某个特定位置的参考点或标记点。在目标检测任务中,算法通常会先在图像中生成一些候选框(bounding boxes),然后通过将这些候选框与真实目标框进行比较,来确定目标的位置。

        在目标跟踪任务中,锚定位置可以用于跟踪目标在视频序列中的运动轨迹。通过在每一帧图像中锚定位置,算法可以准确地跟踪目标地位置变化,实现目标的连续跟踪。也可适用于图像配准

卷积的边缘填充

        在进行卷积操作时,通常会涉及到边缘填充问题。边缘填充是指在及逆行卷积操作时,为了保持输出特征图大小与输入特征图大小一致,需要在输入特征图的边缘进行填充操作。

  • 零填充(Zero Padding):在边缘填充位置填充值为0的像素。
  • 恒定填充(Constant Padding):在边缘填充位置填充固定的常数值。
  • 复制填充(Replication Padding):在边缘填充位置复制邻近像素的值进行填充。

卷积模糊函数

高斯模糊

均值模糊与高斯模糊

        高斯模糊,图像中间的权重系数最大

像素重映射

        把像素点P(x,y)重新银蛇到一个新的位置

        像素重映射 (Pixel Remapping)是指将图像中的像素值根据一定的规则重新映射或转换的过程。在图像处理中,像素重映射常用于图像增强、颜色校正、对比度调整。

  • 灰度级映射:将图像的灰度级从一个范围映射到另一个范围,用于增加图像的对比度和亮度。
  • 伽马校正:通过非线性的伽马函数将输入图像的像素值转换,常用于调整图像的亮度和对比度。
  • 颜色空间转换:将图像从一种颜色空间转换到另一种颜色空间,如RGB到HSV、RGB到Lab等。
  • 直方图均衡化:通过调整图像的直方图来增加图像的对比度和视觉效果。

         通过像素重映射,可以改变图像的外观、增强图像特征、调整图像质量等,从而使图像更符合人眼的感知。

图像二值化

        0与1

全局二值化

        全局二值化是图像处理中一种常用的阈值分割方法,其基本思想是将图像转换为二值图像,即将图像中的像素值根据一个全局阈值进行划分为黑色和白色两种像素值。这种方法适用于图像中的目标和背景的对比度比较大的情况。

全局二值化有以下几个方面:

        1、将彩色的图像转换为灰度图像

        2、选择一个合适的全局阈值,通常可以使用一些自适应的方法(如大津法)

        3、将灰度图像中像素值大于阈值的像素设置为白色,像素值小于等于阈值的设置为黑色

适用于一些简单的图像分割任务。然而,对于一些复杂图像中目标和背景对比度较小的情况,全局二值化可能无法很好地分割目标。在这种情况下,可以考虑使用局部二值化或其他图像分割方法来处理。

自适应二值化

        自适应二值化(Adaptive Thresholding)是一种图像处理技术,与全局二值化相比,它能够根据每个像素的局部特性选取不同的阈值,从而更好地分割图像中的目标物体。自适应二值化可以在处理光照不均匀、背景复杂、目标区域尺寸变化等情况下取得更好的效果。

        在自适应二值化中,通常将图像分割成多个区域,每个区域内的像素根据其局部特性选取不同的阈值进行二值化。常见的自适应二值化方法包括:

  1. 局部均值法:计算每个像素周围邻域的平均灰度值,以此作为阈值进行二值化。
  2. 局部加权平均法:对每个像素周围邻域内的像素进行加权求和,再根据加权和确定阈值进行二值化。
  3. 局部高斯加权法:使用高斯滤波器对图像进行平滑处理,然后通过计算平滑后的图像的局部均值作为阈值进行二值化。

接下来讲解实现步骤:

  1. 将彩色图像转换为灰度图像:通过将RGB通道的值进行加权平均来实现,得到每个像素的灰度值。

  2. 将图像分割成多个局部区域:将图像分割成多个大小相等或不等的局部区域,每个区域内的像素将根据其局部特性选取不同的阈值进行二值化。通常可以使用滑动窗口的方式或其他分割方法来实现这一步骤。

  3. 计算每个局部区域的阈值:对于每个局部区域,可以采用不同的方法来计算阈值。常见的方法包括局部均值法、局部加权平均法和局部高斯加权法。具体选择哪种方法可以根据实际情况和需求进行调整。

  4. 对每个局部区域进行二值化:根据计算得到的阈值,对每个局部区域内的像素进行二值化处理。将像素灰度值大于局部阈值的像素设置为白色,小于等于局部阈值的像素设置为黑色,得到局部二值化的结果。

  5. 合并局部二值化的结果:将所有局部区域的二值化结果合并起来,得到最终的自适应二值化图像。

opencv DNN模块

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

csrf攻击(跨站请求伪造)【2】

1.DVWA中csrf漏洞验证low (1)受害者将密码更改为password,显示更改成功 (2)受害者未退出登录状态,打开了新链接(黑客设计好的修改密码为admin123(原本为passwrod)的链接),导致受害者密码被更改&#xff0c…

测试环境搭建:JDK+Tomcat+Mysql+Redis

基础的测试环境搭建: LAMPLinux(CentOS、ubuntu、redhat)ApacheMysqlPHP LTMJLinux(CentOS、ubuntu、redhat)TomcatMysql(Oracle)RedisJava 真实的测试环境搭建:(企业真实的运维) 基于SpringBoot(SpringCloud分布式微…

【从零开始学架构 前言】整体的学习路线

本文是《从零开始学架构》的第一篇学习笔记,在工作6年左右的这个时间点需要有一些先行的理论来指导即将面临的复杂实践,以便在真正面临复杂实践的时候能有所参照。 主要从以下几个方面和顺序来进行学习 架构基础:从架构设计的本质、历史背景…

网络模块-reactor模式

reactor其实没那么神秘 背景介绍实现一个单线程的reactor(epoll)单独事件结构体reactor总表reactor事件增删改 总结优点缺点使用到reactor的开源库 背景 高性能服务器的开发需要考虑到3点:I/O事件、定时事件、信号。 对于多并发的场景&#…

ROS机器人入门:机器人系统仿真【学习记录】——2

承接上一篇博客: ROS机器人入门:机器人系统仿真【学习记录】——1-CSDN博客 我们先前结束了(上一篇博客中): 1. 概述 2. URDF集成Rviz基本流程 3. URDF语法详解 4. URDF优化_xacro 下面让我们继续学习ROS机器人…

基于ESP32和ESP8266的物联网开发过程(一)

给大家演示一个小工具,通过Wifi去连接ESP32或者ESP8266出来的一个热点。连接到这个热点之后,可以输密码,也可以不输密码。这里我设置的是不输密码直接进来,我这个是ESP8266。 进来之后直接点配置Wifi,然后可以看到ESP8…

tecplot 宏的使用方法及代码改写

我们在对流场数据进行批量提取时,不可避免的需要使用tecplot宏文件,因此,俺就研究了一下,主要针对的是批量切片-批量转换成dat文件-批量转换成excel的格式 以下贴出我的宏文件 1.批量切片 重点在于设置循环 2.批量dat转excel 大…

SPSS之聚类分析

SPSS中系统聚类分析功能在【分析】—【分类】—【系统聚类】中完成。系统聚类有两种类型,一种是对样本进行聚类,称为Q型聚类;一种是对变量进行聚类,称为R型聚类。在【系统聚类分析】—【聚类】框下选择【个案】——Q型聚类&#x…

优惠券样式案例

优惠券样式案例 <template><view class"box"><view class"boxItem"><img src"../../../static/come.png" alt"" class"img"/><span class"icon">&#xffe5;</span><s…

MySQL之查询 拿下 * 。*

DQL数据查询语言 对上述的的查询操作进行代码演示&#xff08;续上一篇学生表代码进行处理&#xff09; 下面是上一篇的代码分享 下面进行简单的查询操作 字符串如果强行进行算数运算默认只为0 查询时常用的单行函数列举 未完待续

电源管理芯片该如何测试?

电源管理芯片作为电子产品的重要组成部分&#xff0c;其性能测试必不可少。通过各项指标测试&#xff0c;评估电源管理芯片是否符合设计规范&#xff0c;及其稳定性和可靠性。 可通过检测以下指标参数来评估电源芯片的性能&#xff1a; 输入/出电压范围、输出纹波、电压调整率、…

数据结构学习/复习8--树与二叉树的概念与基本性质练习

一、树 1.概念 2.树的表示 二、二叉树 1.二叉树的概念 2.与性质相关的题

StreamingT2V

下面首先是参考的一些博客 https://blog.csdn.net/qq_44681809/article/details/137081515 qustion SDEdit:就是给图片加一点噪声然后再用模型去噪&#xff0c;来获得一个更好的帧&#xff0c;比如去掉伪影和污点 这里的分割为m个24帧的块&#xff0c;块与块之间已经有8帧重叠…

抖音 通用交易系统 下单 密钥生成

已PHP为例 前提提条件 必须在 linux 系统中 生成 准备工作 接下来打开命令 执行命令即可 openssl genrsa -out private_key.pem 2048 rsa -in private_key.pem -pubout -out public_key.pem exit 会生成 公匙和 私匙 在小程序中 将 生成应用公匙 复制到小程序后台 在执行…

C++ 概览并发

并发 资源管理 资源 程序中符合先获取后释放&#xff08;显式或隐式&#xff09;规律的东西&#xff0c;比如内存、锁、套接字、线程句柄和文件句柄等。RAII&#xff1a; (Resource Acquisition Is Initialization),也称为“资源获取就是初始化”&#xff0c;是C语言的一种管…

C语言-设置控制台信息

Win_API Win_API是Windows应用程序接口&#xff08;Windows Application Programming Interface&#xff09;的缩写&#xff0c;它是一组函数、系统服务和程序接口&#xff0c;允许开发者在微软Windows操作系统上创建应用程序。Win32 API 是Windows API的一个主要部分&#xff…

测试用例执行的结果pass_fail_block_skip

pass fail block skip 测试用例的执行结果通常包括以下几个方面&#xff1a; 1. **测试结果状态**&#xff1a;通常分为“通过”、“失败”、“阻塞”和“跳过”等状态。 - **通过**&#xff1a;测试用例执行完毕&#xff0c;预期结果与实际结果一致。 - **失败**&am…

C++ 多态(一)

一、多态定义 同一种操作作用于不同的对象时&#xff0c;可以产生不同的行为。在面向对象编程中&#xff0c;多态性是指通过继承和重写实现的&#xff0c;同一个方法在不同的子类中可以表现出不同的行为。多态性可以提高代码的灵活性和可扩展性&#xff0c;使得程序更易于维护…

Golang中实现调用Windows API向指定目标发送ARP请求

简介 Go库中很多实现的arp都是支持osx/linux/bsd之类的&#xff0c; 但几乎没有支持windows的&#xff0c; 也试了一些方式&#xff0c; 目前还是选用调用windows的API&#xff0c; 记录一下这一次windows的API的调用经验。 实现 代码 package main/* #cgo CFLAGS: -I. #cgo …

Altium Designer——检查原理图库正确性并生成报告

一、方法&#xff1a; 1.打开原理图库&#xff1a; 2.点击菜单栏的报告选项&#xff1a; 3.选择器件规则检查&#xff1a; 根据需求勾选&#xff0c;一般都是全部勾选&#xff1a; 二、问题&#xff1a; 1.缺少封装会导致什么问题&#xff1a; 1.首先&#xff1a; 封装是…
最新文章