Otsu 算法
该算法就是通过直方图的特性来自动选取阈值,尤其是有的图像的灰度直方图是双峰。
Opencv API
先给出原图
可以看到这不是灰度图像,所以记住,二值化必须是灰度图像。
cv.cvtColor(img_d1, cv.COLOR_BGR2GRAY)
直接二值化
# 我传入的是灰度图像
retval, dst = cv.threshold(BGR2GRAY(img_d1), 128, 255, cv.THRESH_BINARY)
plt.imshow(dst)
效果并不是很好
Otsu
# 用高斯滤波是为了降噪,噪声有时候会影响直方图的结果
# 我传入的是灰度图像
blur = cv.GaussianBlur(BGR2GRAY(img_d1), (5,5), 0)
# 直接一个API调用就结束了。
ret_otsu, im_otsu = cv.threshold(blur, 0, 255, cv.THRESH_BINARY+cv