六.OpenCv之形态学

6. 形态学

6.1 形态学概述

  • 什么是形态学
    • 指一系列处理图像形状特征的图像处理技术
    • 形态学的基本思想是利用一种特殊的结构元(本质上就是卷积核)来测量或提取输入图像中相应的形状或特征,以便进一步进行图像分析和目标识别。
    • 这些处理方法基本是对二进制图像进行处理, 即黑白图像
    • 卷积核决定着图像处理后的效果
    • 形态学常用基本操作有:
      • 膨胀和腐蚀
      • 开运算
      • 闭运算
      • 顶帽
      • 黑帽

6.2 图像全局二值化

  • 二值化: 将图像的每个像素变成两种值, 比如0, 255.

  • threshold(src, thresh, maxval, type[, dst])

    • src 最好是灰度图

    • thresh: 阈值

    • maxval: 最大值, 最大值不一定是255

    • type: 操作类型. 常见操作类型如下:

    import cv2
    import numpy as np
    
    img = cv2.imread('./dog.jpeg')
    
    gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
    
    # 返回两个结果, 一个是阈值, 另一个是处理后的图片
    ret, dst = cv2.threshold(gray, 80, 255, cv2.THRESH_BINARY)
    
    cv2.imshow('dog', np.hstack((gray, dst)))
    
    cv2.waitKey(0)
    cv2.destroyAllWindows()
    

6.3 自适应阈值二值化

在前面的部分我们使用是全局阈值,整幅图像采用同一个数作为阈值。当时这种方法并不适应与所有情况,尤其是当同一幅图像上的不同部分的具有不同亮度时。这种情况下我们需要采用自适应阈值。此时的阈值是根据图像上的每一个小区域计算与其对应的阈值。因此在同一幅图像上的不同区域采用的是不同的阈值,从而使我们能在亮度不同的情况下得到更好的结果。

adaptiveThreshold(src, maxValue, adaptiveMethod, thresholdType, blockSize, C, dst=None)
  这种方法需要我们指定六个参数,返回值只有一个。

Adaptive Method- 指定计算阈值的方法。
      – cv2.ADPTIVE_THRESH_MEAN_C:阈值取自相邻区域的平均值
      – cv2.ADPTIVE_THRESH_GAUSSIAN_C:阈值取值相邻区域的加权和,权重为一个高斯窗口。
    • Block Size - 邻域大小(用来计算阈值的区域大小)。
    • C - 这就是是一个常数,阈值就等于的平均值或者加权平均值减去这个常数。

# 因为光线问题, 全局二值化导致有部分地方看不见了.这时就需要自适应阈值二值化了.
import cv2
import numpy as np

img = cv2.imread('./math.png')

cv2.namedWindow('img', cv2.WINDOW_NORMAL)
cv2.resizeWindow('img', 1920, 1080)

gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)

# 自适应阈值二值化只返回一个值, 即二值化后的结果
dst = cv2.adaptiveThreshold(gray<
  • 4
    点赞
  • 18
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
引用\[1\]中的代码展示了使用OpenCV和CUDA进行图像处理的示例代码。该代码使用了OpenCV的cuda模块中的函数来对图像进行阈值化和形态学操作。首先,代码读取了一张灰度图像,并显示了原始图像。然后,使用cuda::threshold函数对图像进行阈值化处理,将灰度值大于153的像素设置为255,小于等于153的像素设置为0。接下来,使用cuda::bitwise_not函数对阈值化后的图像进行取反操作。然后,创建了一个3x3的矩形结构元素,并使用cuda::createMorphologyFilter函数创建了一个形态学滤波器,使用MORPH_OPEN操作对图像进行形态学开运算。最后,将处理后的图像下载到CPU内存,并显示结果图像。 引用\[2\]中的代码展示了使用OpenCV和CUDA进行自动阈值化的示例代码。该代码首先读取了一张灰度图像,并显示了原始图像。然后,使用cv::threshold函数对图像进行自动阈值化处理,使用OTSU方法求出最佳阈值,并将图像二值化。最后,显示处理后的图像。 引用\[3\]中的代码展示了使用OpenCV和CUDA进行阈值化的示例代码。该代码首先读取了一张灰度图像,并显示了原始图像。然后,使用cuda::threshold函数对图像进行阈值化处理,将灰度值大于50的像素设置为255,小于等于50的像素设置为0。最后,将处理后的图像下载到CPU内存,并显示结果图像。 综上所述,OpenCV和CUDA可以结合使用来进行图像处理,包括阈值化和形态学操作。通过使用CUDA加速,可以提高图像处理的速度和效率。 #### 引用[.reference_title] - *1* *2* *3* [OpenCV-C++-CUDA-06-形态学二值化操作](https://blog.csdn.net/Daker_Huang/article/details/106882404)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^control,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值