企业网站建设业务报价单,wordpress随意更换主题,设计之家网,珠宝行业网站建设【1】引言
前序学习了5种阈值处理方法#xff0c;包括(反)阈值处理、(反)零值处理和截断处理#xff0c;还学习了一种自适应处理方法#xff0c;相关文章链接为#xff1a;
python学opencv|读取图像#xff08;三十三#xff09;阈值处理-灰度图像-CSDN博客
python学o…【1】引言
前序学习了5种阈值处理方法包括(反)阈值处理、(反)零值处理和截断处理还学习了一种自适应处理方法相关文章链接为
python学opencv|读取图像三十三阈值处理-灰度图像-CSDN博客
python学opencv|读取图像三十四阈值处理-彩色图像-CSDN博客
python学opencv|读取图像三十五反阈值处理-CSDN博客
python学opencv|读取图像三十六反零值处理-CSDN博客
python学opencv|读取图像三十七 截断处理-CSDN博客
python学opencv|读取图像三十八 阈值自适应处理-CSDN博客
在上述所有文章中阈值开关都是自己随机设置的因此实际效果可能未必是最佳。
如果有一种方法可以让函数自动选取最佳阈值开关那就能时刻获得最佳的阈值处理效果这个方法就是“阈值处理参数Otsu”。
【2】官网教程
Otsu方法的说明点击下方链接可以直达
OpenCV: Miscellaneous Image Transformations
官网页面关于Otsu方法的说明为 图1
实际上使用Otsu方法时必须配合前述5种阈值处理方法一起进行阈值调整。因为Otsu方法本身是来辅助选择最优的阈值开关所以阈值处理方法还需要保留。
在下述官网示例说明中我们会看到这一解释
import cv2 as cv # 引入CV模块
import numpy as np #引入numpy模块# 读取图片-直接转化灰度图
src cv.imread(srcf.png,0) #读取图像
dstsrc#输出图像# 读取图片-函数转化灰度图
src1 cv.imread(srcf.png) #读取图像
dst1cv.cvtColor(src1,cv.COLOR_BGR2GRAY) #转化为灰度图dsttnp.hstack((dst,dst1)) #两种灰度图拼接在一起
OpenCV: Image Thresholding 图2
【3】代码测试
首先引入必要的模块和原图像
import cv2 as cv # 引入CV模块
import numpy as np #引入numpy模块# 读取图片-直接转化灰度图
src cv.imread(srcf.png,0) #读取图像
dstsrc#输出图像# 读取图片-函数转化灰度图
src1 cv.imread(srcf.png) #读取图像
dst1cv.cvtColor(src1,cv.COLOR_BGR2GRAY) #转化为灰度图dsttnp.hstack((dst,dst1)) #两种灰度图拼接在一起
然后进行Otsu处理为进行对比也做了零值处理
#阈值处理
t2,dst2cv.threshold(src,58,158,cv.THRESH_TOZERO) #零值-阈值开关58阈值上限158
t3,dst3cv.threshold(src,0,255,cv.THRESH_TOZEROcv.THRESH_OTSU) #零值OTSU
dstonp.hstack((dst2,dst3)) #两种阈值处理图拼接在一起
之后显示图像和保存图像
# 在屏幕展示效果
cv.imshow(srcdstt, dstt) # 在屏幕展示效果
cv.imshow(srcdsto, dsto) # 在屏幕展示效果#显示BGR值
print(dst1像素数为[100,100]位置处的BGR, dst1[100, 100]) # 获取像素数为[100,100]位置处的BGR
print(dst2像素数为[100,100]位置处的BGR, dst2[100, 100]) # 获取像素数为[100,100]位置处的BGR
print(dst3像素数为[100,100]位置处的BGR, dst3[100, 100]) # 获取像素数为[100,100]位置处的BGR#保存图像
cv.imwrite(srcf-dstt.png, dstt) # 保存图像
cv.imwrite(srcf-dst2.png, dst3) # 保存图像
cv.imwrite(srcf-dsto.png, dsto) # 保存图像cv.waitKey() # 图像不会自动关闭
cv.destroyAllWindows() # 释放所有窗口
此处使用的原始图像为 图3
转化后的灰度图为 图4 灰度图
进行单纯零值处理和零值处理OTSU处理后的图像为 图5 单纯零值处理和零值处理OTSU处理
由图5可见右侧为零值处理OTSU处理后的图像更趋向于突出轮廓边线。
由于OTSU处理图像会自动选择最佳阈值开关所以我们输出了特定位置的BGR值 图6 特定像素点BGR值
dst1为转后的原始灰度图dst2为单纯零值处理图dst3为零值处理OTSU处理后的图像。
由图6可见零值处理OTSU处理后的图像自动选择的阈值开关也没有超过156所以这两个图在像素点[100][100]处的BGR值完全相等。
【4】细节说明
使用Otsu方法的时候依然调用cv2.threshold()函数虽然此时Otsu会自动选择阈值开关但仍然需要在阈值开关的位置写0。 图7 提前设定阈值开关为0
【5】总结
掌握了pythonopencv实现Otsu自动调整阈值开关的操作技巧。