首页 > 其他分享 >opencv学习:转换为二值图像,均值滤波、高斯模糊和中值滤波

opencv学习:转换为二值图像,均值滤波、高斯模糊和中值滤波

时间:2024-09-03 19:50:12浏览次数:7  
标签:邻域 阈值 滤波 cv2 像素 opencv 图像 为二值

"Threshold" 在图像处理中是一个非常重要的概念,它涉及到将图像的像素值转换为二值图像(即图像中的像素值只有两种可能:0 或 1,或者在某些情况下是其他两个指定的值)。通过设置一个阈值(threshold),可以将图像中的像素分为两类:一类是高于阈值的像素,另一类是低于或等于阈值的像素。

以下是一些常见的阈值操作类型:

  1. 二值化(Binary):

    • 像素值大于或等于阈值的设置为最大值(通常是255),小于阈值的设置为0。
    • #像素值大于175全设置为255,其余的全是0
      ret,binary=cv2.threshold(image,175,255,cv2.THRESH_BINARY)
  2. 反向二值化(Binary Inverted):

    • 像素值小于或等于阈值的设置为最大值(通常是255),大于阈值的设置为0。
    • #像素值大于175全设置为0,其余的全是255
      ret,binaryinv=cv2.threshold(image,175,255,cv2.THRESH_BINARY_INV)
  3. 截断(Truncation):

    • 像素值大于或等于阈值的设置为阈值,小于阈值的保持不变。
    • #像素值大于175全设置为175,其余的不变
      ret,trunc=cv2.threshold(image,175,255,cv2.THRESH_TRUNC)
  4. 阈值到零(To Zero):

    • 像素值小于或等于阈值的设置为0,大于阈值的保持不变。
    • #像素值大于175全不变,其余的全是0
      ret,tozero=cv2.threshold(image,175,255,cv2.THRESH_TOZERO)
  5. 反向阈值到零(To Zero Inverted):

    • 像素值大于阈值的设置为0,小于或等于阈值的保持不变。
    • #像素值大于175全是0,其余的不变
      ret,tozeroinv=cv2.threshold(image,175,255,cv2.THRESH_TOZERO_INV)
      

                                                                                            

cv2.boxFilter 是 OpenCV 库中的一个函数,用于对图像进行盒形滤波(也称为均值滤波),这是一种简单的线性滤波技术,常用于图像平滑处理。盒形滤波器通过计算图像中每个像素及其邻域像素的均值来实现平滑效果,可以有效地减少图像噪声。

dst = cv2.boxFilter(src, ddepth, ksize, anchor=None, normalize=True, borderType=None)
  • src: 输入图像。
  • ddepth: 输出图像的深度,如果设置为 -1,则输出图像的深度与输入图像相同。
  • ksize: 滤波器的大小,以 (width, height) 的形式给出。例如,(3, 3) 或 (5, 5)
  • anchor: 锚点(可选),用于定义滤波器的中心。默认情况下,锚点位于核的中心。如果提供,它应该是一个 (x, y) 形式的元组。
  • normalize: 归一化标志(可选),如果设置为 True,则每个像素的值是邻域像素值的均值;如果设置为 False,则每个像素的值是邻域像素值的总和。
  • borderType: 边界填充类型(可选),用于处理图像边缘。默认是 cv2.BORDER_DEFAULT

功能描述

  • 平滑效果: 通过计算每个像素及其周围邻域像素的均值来实现平滑效果,有助于减少图像中的噪声。
  • 归一化normalize=True 表示滤波器的值会被归一化,即每个像素的值是邻域像素值的均值,这有助于保持图像的亮度不变。normalize=False 则表示每个像素的值是邻域像素值的总和,这可能导致图像亮度增加。
  • 边界处理borderType 参数决定了如何处理图像的边界。常见的边界类型包括 cv2.BORDER_CONSTANT(填充固定值,如0),cv2.BORDER_REPLICATE(复制边缘像素),cv2.BORDER_REFLECT(镜像反射)等。
  • #对图像noised应用3x3大小的盒形滤波器。参数-1表示滤波器的深度与原图像相同,normalize=True表示滤波器的值会被归一化,即每个像素的值是邻域像素值的均值。
    boxfilter=cv2.boxFilter(noised,-1,(3,3),normalize=True)
    cv2.imshow("boxfilter",boxfilter)
    #这次normalize=False表示滤波器的值不会被归一化,即每个像素的值是邻域像素值的总和。
    boxfilter1=cv2.boxFilter(noised,-1,(3,3),normalize=False)
    cv2.imshow("boxfilter1",boxfilter1)

cv2.GaussianBlur 是 OpenCV 库中的一个函数,用于对图像进行高斯模糊处理。高斯模糊是一种常用的图像平滑技术,它通过使用高斯函数作为权重来计算邻域像素值的加权平均,从而减少图像噪声和细节。

dst = cv2.GaussianBlur(src, ksize, sigmaX, sigmaY=None, borderType=None)
  • src: 输入图像。
  • ksize: 高斯核的大小,以 (width, height) 的形式给出。ksize 必须为正数和奇数。
  • sigmaX: 高斯核在 X 方向上的标准差。
  • sigmaY: 高斯核在 Y 方向上的标准差。如果设置为 None,则 sigmaY 将与 sigmaX 相同。
  • borderType: 边界填充类型(可选),用于处理图像边缘。默认是 cv2.BORDER_DEFAULT

功能描述

  • 平滑效果: 高斯模糊通过使用高斯函数对像素及其邻域进行加权平均,从而实现平滑效果。这种处理方式可以有效地减少图像中的噪声和细节。
  • 标准差sigmaX 和 sigmaY 参数控制高斯核的形状,即权重分布。标准差越大,权重分布越广,模糊效果越强。
  • 边界处理borderType 参数决定了如何处理图像的边界。常见的边界类型包括 cv2.BORDER_CONSTANT(填充固定值,如0),cv2.BORDER_REPLICATE(复制边缘像素),cv2.BORDER_REFLECT(镜像反射)等。
  • #使用cv2.GaussianBlur函数对图像noised应用3x3大小的高斯模糊。第三个参数1是高斯核的标准差,在这里设置为1。
    gaussian=cv2.GaussianBlur(noised,(3,3),1)
    cv2.imshow("gaussian",gaussian)

                                                                                                                                    

cv2.medianBlur 是 OpenCV 库中的一个函数,用于对图像进行中值滤波。中值滤波是一种非线性滤波技术,它将每个像素的值替换为邻域像素值的中位数。这种滤波方法特别有效于去除图像中的“椒盐”噪声(即随机出现的白点和黑点),同时保持边缘的锐度。

dst = cv2.medianBlur(src, ksize)
  • src: 输入图像。
  • ksize: 应用中值滤波的核心大小,必须是一个大于1的奇数。

功能描述

  • 去噪: 中值滤波通过选择邻域内的中位数作为输出像素值,有效地去除了噪声点。
  • 保留边缘: 与其他类型的滤波器(如均值滤波或高斯滤波)相比,中值滤波在平滑图像的同时,更好地保留了图像的边缘信息。
  • #使用cv2.medianBlur函数对图像noised应用5x5大小的中值滤波器。中值滤波器是一种非线性滤波器,它将每个像素的值替换为邻域像素值的中位数。
    median=cv2.medianBlur(noised,5)
    cv2.imshow("median",median)

标签:邻域,阈值,滤波,cv2,像素,opencv,图像,为二值
From: https://blog.csdn.net/mohanyelong/article/details/141869513

相关文章

  • 实际工程项目中是怎么用卡尔曼滤波的
    实际工程项目中是怎么用卡尔曼滤波的两大难题,一是运动学模型的建立,也就是预测方程。这个一方面可以通过比较细的系统辨识来做,这方面要结合具体的应用背景,不一而足,也是普遍做的比较差的地方。另一方面可用某个传感器的输出来做预测,比较典型的就是用加速度计做预测,再用陀螺......
  • 若楠带你初识OpenCV(1)-- 视频、图片基础处理,颜色获取
    文章目录OpenCV一、核心功能二、初识OpenCV1.安装OpenCV2.读取图片3.读取灰度图4.图片保存5.视频文件读取6.区域截取7.提取RGB通道颜色8.合并颜色通道总结OpenCVOpenCV(OpenSourceComputerVisionLibrary)是一个开源的计算机视觉和机器学习库,它主要用于实......
  • OpenCV(cv::findContours())
    目录1.函数定义2.示例3.常见应用4.注意事项cv::findContours()是OpenCV中用于检测图像中的轮廓的函数。1.函数定义voidfindContours(InputOutputArrayimage,OutputArrayOfArrayscontours,OutputArrayhierarchy,intmode,intmethod......
  • MATLAB代码|中心差分卡尔曼滤波(CDKF)的滤波例程,无需下载,直接复制到MATLAB上面就能运行
    文章目录CDKF介绍代码运行结果各模块解析初始化系统模型设置CDKF循环绘图另有关于EKF和CDKF的对比程序:EKF+CDKF两个滤波的MATLAB程序,估计三轴位置,带中文注释——https://blog.csdn.net/callmeup/article/details/136610153。CDKF介绍中心差分卡尔......
  • 卡尔曼滤波算法的学习总结
    本文为作者学习卡尔曼滤波算法后的学习总结,如有错误请指正,万分感谢!前言本文学自B站up主华南小虎队,原视频讲得很好,推荐去观看。原视频卡尔曼滤波讲解一、简介(1)作用在学习卡尔曼滤波之前,我们首先要明白在使用该滤波器后,可以给我们带来什么好处?在此给读者举出一个例子,方......
  • OpenCV(图像像素遍历方法比较)
    目录1.使用场景2.示例代码3.示例代码解析3.1头文件和命名空间3.2主函数main3.2.1创建并初始化矩阵A3.2.2随机初始化矩阵A的值3.2.3克隆矩阵3.2.4使用动态地址操作法进行矩阵操作并计时3.2.5使用迭代器操作法进行矩阵操作并计时3.2.6使用指针操作法进行矩阵操作并计时3......
  • 【全网独家】OpenCV基本结构(Point、Size、Rect等)
    1.简介OpenCV(OpenSourceComputerVisionLibrary)是一个开源的计算机视觉和机器学习软件库。它提供了上千种图像处理和计算机视觉算法,广泛应用在各种领域,如机器人学、实时图像处理、模式识别等。2.基本结构介绍PointPoint用于表示图像中的二维点。可以用Point_<T>模......
  • OpenCV(cv::Mat 类的成员函数 ptr<T>())
    目录1.函数定义2.功能3.示例4.注意事项总结在OpenCV中,Mat类的成员函数ptr<T>()用于获取指向矩阵数据的指针,允许直接访问底层数据。T是指针的类型,它通常与矩阵的元素类型对应。通过这个函数,你可以以一种低开销的方式访问和修改矩阵数据。1.函数定义template<type......
  • opencv学习:基础用法和图像添加边界框设置
    1.opencv基础用法1.从文件加载图像a=cv2.imread("1.jpg")b=cv2.imread("2.jpg")2.从文件读取视频video=cv2.VideoCapture("1.mp4")3.读摄像头cv2.VideoCapture(0)4.保存图片cv2.imwrite(r"1_gray.jpg",b)5.展示图片cv2.imshow("shuiju",a)6.释......
  • 《深度学习》OpenCV 图像边缘检测 算法解析及代码演示
    目录一、图像边缘检测1、什么是边缘检测2、常用的边缘检测算法        1)Sobel算子    2)Scharr算子        3)Canny边缘检测算法        4)Laplacian算子3、边缘检测流程        1)预处理        2)计算梯度     ......