教育网站制作方案,广州现在可以正常出入吗,文化建设的现状及思考,代理ip提取网站源码二值化阈值调整#xff1a;调整是指在进行图像二值化处理时#xff0c;调整阈值的过程。阈值决定了将图像中的像素分为黑色和白色的界限#xff0c;大于阈值的像素被设置为白色#xff0c;小于等于阈值的像素被设置为黑色。
方法一#xff1a;
取阈值为 127#xff0c;…二值化阈值调整调整是指在进行图像二值化处理时调整阈值的过程。阈值决定了将图像中的像素分为黑色和白色的界限大于阈值的像素被设置为白色小于等于阈值的像素被设置为黑色。
方法一
取阈值为 127相当于 0~255 的中位数0255/2 127灰度值大于等于 127 的设置为 0灰度值大于 127 的设置为 255这种方法简单便捷缺点就是阈值设置的太死板了对于不同的照片效果肯定不同。检索资料的时候发现还有人把这种方法称为 史上最弱智的二值处理方法没办法弱智方法也得学啊。
该方法会使用到一个 threshold 方法threshold 方法的语法格式如下
cv2.threshold(src, thresh, maxval, type[, dst]) - retval, dst
参数说明如下
src 输入图中只能输入单通道图一般就是灰度图thresh 阈值maxval 最大值当像素超过了阈值或者小于阈值时所赋予的值type - 二值化操作的类型有 5 种在下文描述dst 输出数组/图像与 src 相同大小和类型以及相同通道数的数组/图像。
返回值 retval 阈值 thresh, dst 经过处理的图像。
二值化操作类型type参数阈值类型
二进制阈值化 THRESH_BINARY过门限的值为最大值其他值为 0反二进制阈值化 THRESH_BINARY_INV过门限的值为 0其他值为最大值截断阈值化 THRESH_TRUNC过门限的值为门限值其他值不变阈值化为 0 THRESH_TOZERO过门限的值不变其他设置为 0反阈值化为 0 THRESH_TOZERO_INV过门限的值为 0其他不变。
以上内容也叫做全局阈值。参考代码
import cv2
import matplotlib.pylab as pltdef main2():img cv2.imread(6.jpg, 0)ret, thresh1 cv2.threshold(img, 127, 255, cv2.THRESH_BINARY)ret, thresh2 cv2.threshold(img, 127, 255, cv2.THRESH_BINARY_INV)ret, thresh3 cv2.threshold(img, 127, 255, cv2.THRESH_TRUNC)ret, thresh4 cv2.threshold(img, 127, 255, cv2.THRESH_TOZERO)ret, thresh5 cv2.threshold(img, 127, 255, cv2.THRESH_TOZERO_INV)titles [Original Image, BINARY,BINARY_INV, TRUNC, TOZERO, TOZERO_INV]images [img, thresh1, thresh2, thresh3, thresh4, thresh5]for i in range(6):plt.subplot(2, 3, i1)plt.imshow(images[i], gray)plt.title(titles[i])plt.xticks([])plt.yticks([])plt.show()main2() 当然也可以把代码里面的127改成别的这就叫手动选择阈值。
方法二
计算像素点矩阵中的所有像素点的灰度值的平均值 avg让每一个像素点与 avg 比较小于等于 avg 的像素点就为 0黑色大于 avg 的像素点为 255白色这种方法看起来靠谱了一些。
使用该方法之前需要先遍历图像的所有灰度值才能计算出平均值。下图所示的阈值计算结果是151.参考代码如下
import cv2def main():img cv2.imread(1.TIF, 0)height, width img.shape# 灰度值总和px_t 0for i in range(height):for j in range(width):px_t img[i][j]print(px_t)# 求像素平均值avg_thresh int(px_t / (height * width))print(avg_thresh)thresh, dst cv2.threshold(img, 127, 255, cv2.THRESH_BINARY)cv2.imshow(dst, dst)cv2.waitKey()cv2.imwrite(2.jpg,dst)if __name__ __main__:main()