1.1 阈值
与名字一样,这种方法非常简单。但像素值高于阈值时,我们给这个像素赋予一个新值(可能是白色),否则我们给它赋予另外一种颜色(也许是黑色)。这个函数就是 cv2.threshhold()。
这个函数的第一个参数就是原图像,原图像应该是灰度图。第二个参数就是用来对像素值进行分类的阈值。第三个参数就是当像素值高于(有时是小于)阈值时应该被赋予的新的像素值。OpenCV
提供了多种不同的阈值方法,这是有第四个参数来决定的。这些方法包括:
• cv2.THRESH_BINARY
• cv2.THRESH_BINARY_INV
• cv2.THRESH_TRUNC
• cv2.THRESH_TOZERO
• cv2.THRESH_TOZERO_INV
r,b=cv2.threshold(a,127,255,cv2.THRESH_BINARY)
这个函数返回两个值:第二个值才是二值化后的图像矩阵
这个函数的入参:
1.原图像
2.阈值设置为127
3.255表示大于阈值127的像素值会被重新赋值为255
4.最后一个参数表示一种二值化算法
注意:原始图像的类型,必须是8位单通道图像,彩色图像无意义
#注意原始图像的类型,必须是8位单通道图像,彩色图像无意义
import cv2
# img = cv2.imread('cat.jpg',0) 也可以直接将图像用灰度值读入,其中0就表示用灰度读图
a=cv2.imread("image\\lena512.bmp",cv2.IMREAD_UNCHANGED) # 先将图像矩阵进行二值化
r,b=cv2.threshold(a,127,255,cv2.THRESH_BINARY)
# 这个函数返回两个值:第二个值才是二值化后的图像矩阵
# 这个函数的入参:
# 1.原图像
# 2.阈值设置为127
# 3.255表示大于阈值127的像素值会被重新赋值为255
# 4.最后一个参数表示一种二值化算法
cv2.imshow("a",a)
cv2.imshow("b",b)
print(r)
cv2.waitKey()
cv2.destroyAllWindows()
二进制阈值化:r,b=cv2.threshold(a,127,255,cv2.THRESH_BINARY)
反二进制阈值化:r,b=cv2.threshold(a,127,255,cv2.THRESH_BINARY_INV)
截断阈值化:r,b=cv2.threshold(a,127,255,cv2.cv2.THRESH_TRUNC)
反阈值化为0:r,b=cv2.threshold(a,127,255,cv2.THRESH_TOZERO_INV)
阈值化为0:r,b=cv2.threshold(a,127,255,cv2.THRESH_TOZERO)
import cv2
a=cv2.imread("image\\lena512.bmp",cv2.IMREAD_UNCHANGED)
#注意原始图像的类型,必须是8位单通道图像,彩色图像无意义
r,b=cv2.threshold(a,127,255,cv2.THRESH_BINARY_INV)
r,b1=cv2.threshold(a,127,255,cv2.THRESH_BINARY_INV)
r,b2=cv2.threshold(a,127,255,cv2.THRESH_TRUNC)
r,b3=cv2.threshold(a,127,255,cv2.THRESH_TOZERO_INV)
r,b4=cv2.threshold(a,127,255,cv2.THRESH_TOZERO)
cv2.imshow("a",a)
cv2.imshow("b",b)
print(r)
cv2.waitKey()
cv2.destroyAllWindows()