云南定制化网站建设,河南省住房城乡建设厅官网,dedecms网站地图调用,图片制作视频教程【Opencv–adaptiveThreshold】自适应阈值图像二值化 文章目录【Opencv--adaptiveThreshold】自适应阈值图像二值化1. 介绍2. adaptiveThreshold函数2.1 函数调用2.2 补充说明3. 代码示例4. 效果4.1 原图#xff08;ori.img#xff09;4.2 处理后5. 参考1. 介绍
在这里 cv2.…【Opencv–adaptiveThreshold】自适应阈值图像二值化 文章目录【Opencv--adaptiveThreshold】自适应阈值图像二值化1. 介绍2. adaptiveThreshold函数2.1 函数调用2.2 补充说明3. 代码示例4. 效果4.1 原图ori.img4.2 处理后5. 参考1. 介绍
在这里 cv2.threshold函数 介绍了普通的opencv图像阈值处理函数。但threshold 的图像阈值处理对于某些光照不均的图像这种全局阈值分割的方法并不能得到好的效果。
图像阈值化操作中我们更关心的是从二值化图像中分离目标区域和背景区域仅仅通过固定阈值很难达到理想的分割效果。在图片中的灰度是不均匀的所以通常情况下图片中不同区域的阈值是不一样的。这样就需要一种方法根据图像不同区域亮度或灰度分布计算其局部阈值来进行阈值处理。这种方法就是自适应阈值化图像处理实际上这可以称为局部阈值法在OpenCV中adaptiveThreshold就是这种方法。
2. adaptiveThreshold函数
2.1 函数调用
import cv2
dst cv2.adaptiveThreshold(src, maxValue, adaptiveMethod, thresholdType, blockSize, C)参数说明 src源图像8位的灰度图。maxValue用于指定满足条件的像素设定的灰度值adaptiveMethod使用的自适应阈值算法有2种类型ADAPTIVE_THRESH_MEAN_C算法局部邻域块均值或ADAPTIVE_THRESH_GAUSSIAN_C局部邻域块高斯加权和。 ADAPTIVE_THRESH_MEAN_C的计算方法是计算出邻域的平均值再减去第六个参数C的值ADAPTIVE_THRESH_GAUSSIAN_C的计算方法是计算出邻域的高斯均匀值再减去第六个参数C的值。处理边界时使用BORDER_REPLICATE | BORDER_ISOLATED模式。 thresholdType阈值类型只能是THRESH_BINARY或THRESH_BINARY_INV二者之一具体参考上面“图像阈值处理”的表格blockSize表示邻域块大小用来计算区域阈值一般选择3、5、7……C表示常数它是一个从均匀或加权均值提取的常数通常为正数但也可以是负数或零 返回值 dst处理后的图像
2.2 补充说明
亮度较高的图像区域的二值化阈值通常会较高而亮度较低的图像区域的二值化阈值则会相适应地变小。在灰度图像中灰度值变化明显的区域往往是物体的轮廓所以将图像分成一小块一小块的去计算阈值往往会得出图像的轮廓。因此函数adaptiveThreshold除了将灰度图像二值化也可以进行边缘提取。之所以能进行边缘提取是因为当block很小时如block_size3 or 5 or 7时“自适应”的程度很高即容易出现block里面的像素值都差不多这样便无法二值化而只能在边缘等梯度大的地方实现二值化结果显得它是边缘提取函数。当把blockSize设为比较大的值时如blockSize21 or 31 or 41时adaptiveThreshold便是二值化函数blockSize必须为大于1的奇数这里解释一下size为偶数的话该block的中心点就不确定了因此为奇数。如果使用平均值方法平均值mean为180差值delta为10maxValue设为255。那么灰度小于170的像素为0大于等于170的像素为255如果是反向二值化灰度小于170的像素为255大于等于170的像素为0。
3. 代码示例
import cv2img cv2.imread(ori.jpg, 0)img1 cv2.adaptiveThreshold(img, 255, cv2.ADAPTIVE_THRESH_MEAN_C, cv2.THRESH_BINARY_INV, 3, 5)
cv2.imwrite(new1.jpg, img1)img2 cv2.adaptiveThreshold(img, 255, cv2.ADAPTIVE_THRESH_MEAN_C, cv2.THRESH_BINARY_INV, 31, 5)
cv2.imwrite(new1.jpg, img2)4. 效果
4.1 原图ori.img 4.2 处理后
new1.img new2.jpg
可以看到
当blockSize小时轮廓识别效果明显突出边缘区域。而blockSize大时就是一个二值化图像。
5. 参考
【1】https://blog.csdn.net/LaoYuanPython/article/details/108558834