OpenCV之形态学

  • 全局二值化

  • threshold(src,thresh(阈值),maxval(最大值,默认255),type(选择二值化的类型)),会返回两个值,一个是阈值,一个是二值化后的图像

  • 全局二值化的原理

  • 将小于阈值的像素转化为0或255,将大于阈值的值转化为255或0(具体如何转换,要看采用何种二值化的类别)

  • 二值化的类型

  • 二值化的效果

  • 左边是原图,右边是二值化图

  • 自适应阈值

  • adaptiveThreshold(src,maxval,adaptiveMethod(计算阈值的方法),thresholdType(二值化的类型),blocksize(卷积核的大小),C(偏差))

  • 由于全局二值化只采用一个阈值对整个图像进行处理,对一些明亮分布不均匀的图像效果很差,所以在同一幅图像的不同区域采用不同的阈值,使我们能在明亮分布不均匀的图像中得到更好的结果

  • 计算阈值的方法

  • cv2.ADAPTIVE_THRESHOLD_MEAN_C:阈值取自相邻区域的平均值

  • cv2.ADAPTIVE_THRESHOLD_GAUSSIAN_C:阈值取自相邻区域的加权和,权重是一个高斯窗口

  • 获取形态学卷积核

  • getStructuringElement(shape(是指卷积核内部1的分布情况),ksize)

  • shape

  • cv2.MORPH_RECT:生成矩阵形式的全为1的卷积核

  • cv2.MORPH_ELLIPSE:生成椭圆状的全为1的卷积核,其余位置为0

  • cv2.MORPH_CROSS:生成十字架样式的全为1的卷积核,其余位置为0

  • 腐蚀

  • erode(src,kernel,iterations(迭代次数))

  • 腐蚀就是用卷积核扫描图像,如果卷积核内的像素点都是白色,则锚点为白色

  • 使用腐蚀后,一般图形都会小一圈(边缘被腐蚀掉了)

  • 腐蚀效果

  • 左边是原图,右边是腐蚀化的图

  • 膨胀

  • dilate(src,kernel,iterations)

  • 膨胀就是用卷积核扫描图像,只要卷积核的锚点是非0值,无论周围是不是非0值,都变成非0值

  • 膨胀后的图形,一般都会大一圈

  • 膨胀效果

  • 左边是原图,右边是膨胀化的图

  • 开运算

  • 开运算 = 腐蚀 + 膨胀

  • 开运算是morphologyEx中op的一个选择参数,即cv2.MORPH_OPEN

  • 开运算适用于图像中图形外部有“脏东西”且处理完“脏东西”还可以恢复原图形形状的情况

  • 开运算效果

  • 左边是原图,右边是开运算后的图

  • 闭运算

  • 闭运算 = 膨胀 + 腐蚀

  • 闭运算是morphologyEx中op的一个选择参数,即cv2.MORPH_CLOSE

  • 闭运算适用于图像中图形内部有“脏东西”且处理完“脏东西”还可以恢复原图形形状的情况

  • 闭运算效果

  • 左边是原图,右边是闭运算后的图

  • 形态学梯度

  • 形态学梯度 = 原图 - 腐蚀

  • 由于腐蚀之后,图形变小了,也就是腐蚀掉了边缘,所以用原图 - 腐蚀就等于边缘,也就是形态学梯度

  • 形态学梯度也有直接的api,morphologyEx中op的一个选择参数,即cv2.MORPH_GRADIENT

  • 形态学梯度与Canny算子的比较结果

  • 左边是Canny,右边是形态学梯度

  • 顶帽操作

  • 顶帽操作 = 原图 - 开运算

  • 开运算的结果是得到无杂质的图形,所以顶帽操作得到的是图像中图形外的杂质

  • 顶帽操作也有api,morphologyEx中op的一个选择参数,即cv2.MORPH_TOPHAT

  • 顶帽操作的效果

  • img图中左边是原图,右边是调用顶帽api的图,dst3是原图 - 开运算的结果,dst6是原图 - (先腐蚀后膨胀)的结果,没有太大区别

  • 黑帽操作

  • 黑帽操作 = 原图 - 闭运算

  • 闭运算的结果是得到无杂质的图形,所以黑帽操作得到的是图像中图形内的杂质

  • 黑帽操作也有api,morphologyEx中op的一个选择参数,即cv2.MORPH_BLACKHAT

  • 黑帽操作的结果

  • img是原图,dst1是调用黑帽api的结果,dst2是原图 - 闭运算的结果,dst3是原图 - (先膨胀后腐蚀)的结果,可以看出黑帽api与直接公式计算出来的效果有一点点不一样

引用\[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 ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值