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.rhkb.cn/news/320291.html

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

相关文章

重学java 29.经典接口

光阴似箭,我好像跟不上 —— 24.5.6 一、java.lang.Comparable 我们知道基本数据类型的数据(除boolean类型外)需要比较大小的话,直接使用比较运算符即可,但是引用数据类型是不能直接使用比较运算符来比较大小的。那么,如何解决这个…

ECC 号码总结

1、问题背景 在手机开发过程中,经常遇见各种紧急号码问题,在此特意总结下紧急号码相关知识。 2、紧急号码来源 在MTK RILD EccNumberSource.h中,定义了如下几种紧急号码来源。 按优先级排序介绍如下 2.1、SOURCE_NETWORK 网络下发&#xff…

本地大语言模型LLM的高效运行专家 | Ollama

Ollama简介 Ollama是一个开源的大型语言模型服务工具,它帮助用户快速在本地运行大模型。通过简单的安装指令,用户可以执行一条命令就在本地运行开源大型语言模型,如Llama 2。Ollama极大地简化了在Docker容器内部署和管理LLM的过程&#xff0…

Linux网络设置

配置网络相关设置 一般包括如下内容: 主机名 IP/netmask A B 路由:默认网关 DNS服务器 主DNS服务器 次DNS服务器 第三个DNS服务器 ping baidu 网络配置命令 ifconfig ifconfig -a #表示显示所有网卡包括没有启动的网卡 ifconfig 网卡名称 [up|down…

考研数学|基础跟张宇,强化直接1000题还是先做660?

跟宇哥用1000题的,我愿称之为卷王之王!660对基础阶段是绝佳的查漏补缺,必做! 自我介绍一下:我21年一战数学83,总分没过线,22年二战143,逆袭上岸211!660是我的心头好&…

js api part4

其他事件 页面加载事件 外部资源(如图片、外联CSS和JavaScript等)加载完毕时触发的事件 原因:有些时候需要等页面资源全部处理完了做一些事情,老代码喜欢把 script 写在 head 中,这时候直接找 dom 元素找不到。 事件…

简单介绍IIC通信协议

文章目录 一,简单介绍二,IIC物理层三,IIC通信时序1.起始位与停止位2.IIC读写地址位信号3.IIC应答信号4.IIC数据位收发信号 四,总线速率五,主机发送数据流程六,主机接收数据流程七,IIC的时钟延展…

力扣每日一题109:有序链表转换二叉搜索树

题目 中等 给定一个单链表的头节点 head ,其中的元素 按升序排序 ,将其转换为 平衡 二叉搜索树。 示例 1: 输入: head [-10,-3,0,5,9] 输出: [0,-3,9,-10,null,5] 解释: 一个可能的答案是[0,-3,9,-10,null,5],它…

高效转化,智能私信软件策略揭秘

在数字营销的浪潮中,智能私信软件策略正成为提升转化率的重要工具。这种软件以其个性化、自动化的特点,正在重新定义与客户的互动方式,让企业能够更加高效地吸引并留住潜在客户。 智能私信软件的核心在于其高度的定制化和人性化设计。通过大数…

Android Handler用法

Android Handler用法 为什么要设计Handler机制?Handler的用法1、创建Handler2、Handler通信2.1 sendMessage 方式2.2 post 方式 Handler常用方法1、延时执行2、周期执行 HandlerThread用法主线程-创建Handler子线程-创建Handler FAQMessage是如何创建主线程中Looper…

今天发现个有意思的问题:java基础篇章网络编程的报错问题,顺便看一下各个GPT的实力

问题: 一个java socket网络编程的引发的异常,具体代码Client.java、Server.java,如下 Client.java package Test2;import java.io.*; import java.net.Socket;public class Client {public static void main(String[] args) throws IOExce…

JMeter 请求头信息配置详解

在进行 Web 测试和 API 测试时,正确配置 HTTP 请求头是关键步骤之一,尤其当使用诸如 JMeter 这样的强大工具时。在本文中,我将详细介绍如何在 JMeter 中有效地配置和管理HTTP请求头。 在 JMeter 中添加和配置 HTTP 请求头 步骤 1: 打开 HTT…

中间件研发之Springboot自定义starter

Spring Boot Starter是一种简化Spring Boot应用开发的机制,它可以通过引入一些预定义的依赖和配置,让我们快速地集成某些功能模块,而无需繁琐地编写代码和配置文件。Spring Boot官方提供了很多常用的Starter,例如spring-boot-star…

张大哥笔记:卖盗版网课,获利 100 万被抓

这几天刷视频,看到一个新闻,某大学生卖盗版网课,把别人2000多正版网课,以做活动名义售卖20元,获利100多万被抓。 下方图片来自:极目新闻 卖这种盗版网课,门槛低,成本低,…

揭秘!如何利用自动化工具提升抖音推广效果

亲爱的读者朋友们,你是否在为抖音的推广效果而苦恼?看着别人家的视频轻松获得大量曝光,你是否也心生羡慕?今天,我们就来分享一个秘密武器,让你轻松提升抖音推广效果! 首先,让我们来了…

为何美国多IP服务器是全自动内容采集站的最佳选择?

为何美国多IP服务器是全自动内容采集站的最佳选择? 在建设全自动内容采集站时,选择合适的服务器至关重要。而在众多选项中,美国多IP服务器被认为是最佳选择,究竟为何呢?本文将从多个方面进行深入探讨。 为何美国多IP服务器是全自动内容采集…

项目|保障房房产管理系统,政务房产解决方案

一、系统概况 保障房管理系统是是为了落实中央关于住房保障的相关政策,实现对低收入家庭住房状况的调查管理、保障计划及落实管理、保障申请及审核管理、保障户和保障房源档案管理等。 针对政府保障房产管理的一站式解决方案,专注于为解决复杂、繁琐的…

【精品毕设推荐】搜索引擎的设计与实现

点击免费下载原文及代码 摘要 我们处在一个大数据的时代,伴随着网络信息资源的庞大,人们越来越多地注重怎样才能快速有效地从海量的网络信息中,检索出自己需要的、潜在的、有价值的信息,从而可以有效地在日常工作和生活中发挥作…

【C++】stack、queue和priority_queue的模拟实现

在本篇博客中,作者将会讲解STL中的stack、queue和priority_queue的模拟实现,同时还会带大家了解一下deque这个容器。 一.什么是适配器 STL中一共有6大组件:容器,适配器,空间配置器,仿函数,迭代器…

机器学习——3.梯度计算与梯度下降

基本概念 梯度的本意是一个向量(矢量),表示某一函数在该点处的方向导数沿着该方向取得最大值,即函数在该点处沿着该方向(此梯度的方向)变化最快,变化率最大(为该梯度的模&#xff0…