当前位置: 首页 > news >正文

Python-初学openCV——图像预处理(一)

目录

一、图像翻转

 二、颜色加法

三、颜色加权加法

四、灰度化

        1、最大值法

        2、平均值法

        3、加权均值法

五、二值化处理

        1、说明

        2、全局阈值法

                2.1 阈值法(THRESH_BINARY)——(二值化)

                 2.2 反阈值法(THRESH_BINARY_INV)

                 2.3 截断阈值法(THRESH_TRUNC)

                2.4 低阈值零处理(THRESH_TOZERO)

                2.5 超阈值零处理(THRESH_TOZERO_INV)

        3、OTSU阈值法

        4、自适应二值化


一、图像翻转

        在OpenCV中,图片的镜像旋转是以图像的中心为原点进行镜像翻转的

        cv2.flip(img,flipcode)

                flipcode: 指定翻转类型的标志

                        flipcode = 0时,垂直翻转,图像像素点沿x轴翻转

                        flipcode = 1时,水平翻转,图片像素点沿y轴翻转

                        flipcode = -1时,水平垂直翻转,两者的结合

示例:

 二、颜色加法

        可以使用OpenCV的cv.add()函数把两幅图像相加,或者可以简单地通过numpy操作添加两个图像,如res = img1 + img2。两个图像应该具有相同的大小和类型

OpenCV加法和Numpy加法之间存在差异。OpenCV的加法是饱和操作,而Numpy添加是模运算

示例:

三、颜色加权加法

        cv2.addWeighted(src1, alpha, src2, deta, gamma)

        src1、src2:输入图像;

        alpha、beta:两张图像权重;

        gamma:亮度调整值;

                gamma > 0:图像变亮

                gamma < 0:图像变暗

                gamma = 0:没有额外亮度调整

(这其实也是加法,但是不同的是两幅图像的权重不同,这就会给人一种混合或者透明的感觉 )

#图像混合公式
g(x) = (1−α)f0(x) + αf1(x)
#函数cv2.addWeighted()实际操作的公式
dst = α⋅img1 + β⋅img2 + γ

示例:

四、灰度化

        将彩色图像转换为灰度图像的过程称为灰度化,灰度图与彩色图最大的不同就是:彩色图是由R、G、B三个通道组成,而灰度图只有一个通道,也称为单通道图像,所以彩色图转成灰度图的过程本质上就是将R、G、B三通道合并成一个通道的过程

        1、最大值法

                对于彩色图像的每个像素,它会从R、G、B三个通道的值中选出最大的一个,并将其作                  为灰度图像中对应位置的像素值

        2、平均值法

                对于彩色图像的每个像素,它会将R、G、B三个通道的像素值全部加起来,然后再除以                  三,得到的平均值就是灰度图像中对应位置的像素值

        3、加权均值法

                对于彩色图像的每个像素,它会按照一定的权重去乘以每个通道的像素值,并将其相                      加,得到最后的值就是灰度图像中对应位置的像素值

五、二值化处理

        1、说明

                一幅二值图像的二维矩阵仅由0、1两个值构成,“0”代表黑色,“1”代白色。由于每一像                   素(矩阵中每一元素)取值仅有0、1两种可能,所以计算机中二值图像的数据类型通常                   为1个二进制位。二值图像通常用于文字、线条图的扫描识别(OCR)和掩膜图像的存储

                其操作的图像也必须是灰度图,二值化的过程,就是将一张灰度图上的像素根据某种规                  则修改为0和maxval(maxval表示最大值,一般为255,显示白色)两种像素值,使图                    像呈现黑白的效果,能够帮助我们更好地分析图像中的形状、边缘和轮廓等特征

                简便:降低计算量和计算需求,加快处理速度

                节约资源:二值图像占用空间远小于彩色图

                边缘检测:二值化常作为边缘检测的预处理步骤,简化后的图易于识别出轮廓和边界

        2、全局阈值法

_,binary = cv2.threshold(img,thresh,maxval,type)

img:输入图像,要进行二值化处理的灰度图

thresh:设定的阈值。当像素值大于(或小于,取决于阈值类型)thresh时,该像素被赋予的值

type:阈值处理的类型

返回值

        第一个值(通常使用 '_'):计算出的阈值,若使用自适应阈值法,会根据算法自动出这                                                              个值

        第二个值(binary):二值化后的图像矩阵。与输入图像尺寸相同

                2.1 阈值法(THRESH_BINARY)——(二值化)

                        阈值法就是通过设置一个阈值,将灰度图中的每一个像素值与该阈值进行比较,小                   于等于阈值的像素就被设置为0(通常代表背景),大于阈值的像素就被设置为maxval                 (通常代表前景)。对于我们的8位图像(0~255)来说,通常是设置为255

                 2.2 反阈值法(THRESH_BINARY_INV)

                        反阈值法是当灰度图的像素值大于阈值时,该像素值将会变成0(黑),当灰度图                      的像素值小于等于阈值时,该像素值将会变成maxval(与阈值法相反)

                 2.3 截断阈值法(THRESH_TRUNC)

                        指将灰度图中的所有像素与阈值进行比较,像素值大于阈值的部分将会被修改为阈                    值,小于等于阈值的部分不变

                2.4 低阈值零处理(THRESH_TOZERO)

                        低阈值零处理,字面意思,就是像素值小于等于阈值的部分被置为0(也就是黑                       色),大于阈值的部分不变

                2.5 超阈值零处理(THRESH_TOZERO_INV)

                        超阈值零处理就是将灰度图中的每个像素与阈值进行比较,像素值大于阈值的部分                    置为0(也就是黑色),像素值小于等于阈值的部分不变

        3、OTSU阈值法

        cv2.THRESH_OTSU 并不是一个有效的阈值类型或标。THRESH_OTSU 本身并不是一个独立的阈值化方法,而是与 OpenCV 中的二值化方法结合使用的一个标志。具体来说,THRESH_OTSU 通常与 THRESH_BINARYTHRESH_BINARY_INV 结合使用。在实际应用中,如果你使用 THRESH_OTSU 标志但没有指定其他二值化类型,默认情况下它会与 THRESH_BINARY 结合使用。也就是说,当你仅指定了 cv2.THRESH_OTSU,实际上等同于同时指定了 cv2.THRESH_BINARY + cv2.THRESH_OTSU

        4、自适应二值化

        与二值化算法相比,自适应二值化更加适合用在明暗分布不均的图片,因为图片的明暗不均,导致图片上的每一小部分都要使用不同的阈值进行二值化处理,这时候传统的二值化算法就无法满足我们的需求了,于是就出现了自适应二值化

        自适应二值化方法会对图像中的所有像素点计算其各自的阈值,这样能够更好的保留图片里的一些信息

cv2.adaptiveThreshold(image_np_gray, maxval, adaptiveMethod, thresholdType, blockSize, c)

参数为:

image_np_gray:灰度图

maxval:最大阈值,一般为255

adaptiveMethod:小区域阈值的计算方式

        ADAPTIVE_THRESH_MEAN_C:小区域内取均值

        ADAPTIVE_THRESH_GAUSSIAN_C:小区域内加权求和,权重是个高斯核

thresholdType:二值化方法, 只能使用阈值法和反阈值法

blockSize:选取的小区域的面积,如7就是7*7的小块

c:最终阈值等于小区域计算出的阈值再减去此值

 

http://www.dtcms.com/a/293760.html

相关文章:

  • C++刷题 - 7.23
  • 开源 Arkts 鸿蒙应用 开发(九)通讯--tcp客户端
  • 在 Ubuntu 20.04.5 LTS 系统上安装 Docker CE 26.1.4 完整指南
  • Spring Cloud Alibaba Sentinel 基本工作原理源码阅读
  • MACOS安装配置Gradle
  • 国产数据库转向 “融合” 赛道:电科金仓的下一代形态定义之路
  • 基于Matlab传统图像处理技术的车辆车型识别与分类方法研究
  • 资本押注会成长的玩具,AI潮玩赛道开始升温
  • 华为云ELB(弹性负载均衡)持续报异常
  • 永磁同步电机控制算法--弱磁控制(负载能力最大化的定交轴)
  • 【C++】C++ 的入门语法知识1
  • 在easyui中如何设置自带的弹窗,有输入框
  • 解决Spring事务中RPC调用无法回滚的问题
  • 零基础学编程,编程从入门到精通系列教程,附:编程工具箱之时间计算构件的用法#零基础自学编程 学习计划#新手学编程 高效学习方法
  • HF83311_VB1/HF83311Q_VB1:高性能USB HiFi音频解码器固件技术解析
  • Leetcode-15. 三数之和
  • 《计算机“十万个为什么”》之 [特殊字符] 深浅拷贝 引用拷贝:内存世界的复制魔法 ✨
  • 1.1 Deep learning?pytorch ?深度学习训练出来的模型通常有效但无法解释合理性? 如何 解释?
  • 英语词汇积累Day1-10(summary)
  • Django实战:Python代码规范指南
  • 【Java】Reflection反射(代理模式)
  • 算法竞赛备赛——【图论】最小生成树
  • 《元素周期表》超高清PDF
  • IDEA如何管理多个Java版本。
  • STM32 基础知识 定时器【概念】
  • 基于PyTorch的多视角二维流场切片三维流场预测模型
  • 【NLP舆情分析】基于python微博舆情分析可视化系统(flask+pandas+echarts) 视频教程 - 主页-微博点赞量Top6实现
  • 19.动态路由协议基础
  • 备受关注的“Facebook Email Scraper”如何操作?
  • 开源 Arkts 鸿蒙应用 开发(十)通讯--Http