接着下来看THRESH_TRUNC类型,这个类型与前面两个类型的区别在于最大值不起作用,而是让大于阈值的像素值全部等于阈值。演示例子如下:
#python 3.7.4,opencv4.1
#蔡军生 https://blog.csdn.net/caimouse/article/details/51749579
#
import cv2
import numpy as np
#图像数据
src = np.array([[100, 157, 245], [20, 51, 250], [50, 2, 200]], np.uint8)
#阈值处理
retval, dst = cv2.threshold(src, 150, 255, cv2.THRESH_TRUNC)
print(src)
print(retval,'\n', dst)
cv2.waitKey(0)
cv2.destroyAllWindows()
结果输出如下:
[[100 157 245]
[ 20 51 250]
[ 50 2 200]]
150.0
[[100 150 150]
[ 20 51 150]
[ 50 2 150]]
在结果里可以看到,大于150的值都换成150了,其它值保持原样。它采用的公式是这样:
再来看斑马的例子:
#python 3.7.4,opencv4.1
#蔡军生 https://blog.csdn.net/caimouse/article/details/51749579
#
import cv2
import numpy as np
#图片的路径
imgname = "imgbin1.png"
#读取图片
image = cv2.imread(imgname, cv2.IMREAD_GRAYSCALE)
#图片的高度和宽度
h,w = image.shape[:2]
print('imagesize={}-{}'.format(w,h))
#显示原图
cv2.imshow("Image",image)
#阈值分割
retval, out = cv2.threshold(image, 100, 255, cv2.THRESH_TRUNC)
cv2.imshow("out",out)
cv2.waitKey(0)
cv2.destroyAllWindows()
结果输出如下:
输入图片
输出图片
从结果上可以看到,图片的白色变暗了,因为最白的值都从255变成150。
接着下来是THRESH_TOZERO类型,这个类型是大于阈值的像素值保持,小于等于阈值就设置为0。演示的例子如下:
#python 3.7.4,opencv4.1
#蔡军生 https://blog.csdn.net/caimouse/article/details/51749579
#
import cv2
import numpy as np
#图像数据
src = np.array([[100, 157, 245], [20, 51, 250], [50, 2, 200]], np.uint8)
#阈值处理
retval, dst = cv2.threshold(src, 150, 255, cv2.THRESH_TOZERO)
print(src)
print(retval,'\n', dst)
cv2.waitKey(0)
cv2.destroyAllWindows()
结果输出如下:
[[100 157 245]
[ 20 51 250]
[ 50 2 200]]
150.0
[[ 0 157 245]
[ 0 0 250]
[ 0 0 200]]
从这个结果里可以看到,大于150的值全部保持原样,小于等于150的值设置为0。它使用的公式如下:
再来测试一下斑马的例子:
#python 3.7.4,opencv4.1
#蔡军生 https://blog.csdn.net/caimouse/article/details/51749579
#
import cv2
import numpy as np
#图片的路径
imgname = "imgbin1.png"
#读取图片
image = cv2.imread(imgname, cv2.IMREAD_GRAYSCALE)
#图片的高度和宽度
h,w = image.shape[:2]
print('imagesize={}-{}'.format(w,h))
#显示原图
cv2.imshow("Image",image)
#阈值分割
retval, out = cv2.threshold(image, 100, 255, cv2.THRESH_TOZERO)
cv2.imshow("out",out)
cv2.waitKey(0)
cv2.destroyAllWindows()
结果输出如下:
输入图片
输出图片
接着下来的THRESH_TOZERO_INV类型与前面这个THRESH_TOZERO类型是刚好相反的意思,就是大于阈值设置为0,小于等于阈值就保持。演示的例子:
#python 3.7.4,opencv4.1
#蔡军生 https://blog.csdn.net/caimouse/article/details/51749579
#
import cv2
import numpy as np
#图像数据
src = np.array([[100, 157, 245], [20, 51, 250], [50, 2, 200]], np.uint8)
#阈值处理
retval, dst = cv2.threshold(src, 150, 255, cv2.THRESH_TOZERO_INV)
print(src)
print(retval,'\n', dst)
cv2.waitKey(0)
cv2.destroyAllWindows()
结果输出如下:
[[100 157 245]
[ 20 51 250]
[ 50 2 200]]
150.0
[[100 0 0]
[ 20 51 0]
[ 50 2 0]]
在结果里可以看到大于150的值全部设置为0,不大于的值全部保持。它是遵守下面的公式:
最后来看一下斑马的例子:
#python 3.7.4,opencv4.1
#蔡军生 https://blog.csdn.net/caimouse/article/details/51749579
#
import cv2
import numpy as np
#图片的路径
imgname = "imgbin1.png"
#读取图片
image = cv2.imread(imgname, cv2.IMREAD_GRAYSCALE)
#图片的高度和宽度
h,w = image.shape[:2]
print('imagesize={}-{}'.format(w,h))
#显示原图
cv2.imshow("Image",image)
#阈值分割
retval, out = cv2.threshold(image, 100, 255, cv2.THRESH_TOZERO_INV)
cv2.imshow("out",out)
cv2.waitKey(0)
cv2.destroyAllWindows()
结果输出如下:
输入照片
输出照片
https://blog.csdn.net/caimouse/article/details/51749579
转载:https://blog.csdn.net/caimouse/article/details/101371203