ret,dst = cv2.threshold(src,thresh,maxval,type)
cv2.THRESH_BINARY:超过阈值部分的,取最大值maxval,否则就是0
cv2.THRESH_BINARY_INV:与BINARY的情况刚刚相反
cv2.THRESH_TRUNC:大于阈值的部分,设置为阈值。否则不变。
cv2.THRESH_TOZERO:大于阈值的部分不改变,否则设置为0
cv2.THRESH_TOZERO_INV:TOZERO的反转。
img_dog = cv2.resize(img_dog,(455,540))
print(img_dog)
cv2.imshow("img_dog",img_dog)
cv2.waitKey(0)
ret,dst = cv2.threshold(img_dog,127,255,cv2.THRESH_BINARY)
print(dst.shape)
print(dst)
cv2.imshow("cv2.THRESH_BINARY",dst)
cv2.waitKey(0)
其他四种代码如下:
ret,BINARY_INV = cv2.threshold(img_dog,127,255,cv2.THRESH_BINARY_INV)
ret,THRESH_TRUNC = cv2.threshold(img_dog,127,255,cv2.THRESH_TRUNC)
ret,THRESH_TOZERO= cv2.threshold(img_dog,127,255,cv2.THRESH_TOZERO)
ret,THRESH_TOZERO_INV = cv2.threshold(img_dog,127,255,cv2.THRESH_TOZERO_INV)
titles = ["origial image","BINARY_INV","TRUNC","TOZERO","TOZERO_INV"]
images =[img_dog,BINARY_INV,THRESH_TRUNC,THRESH_TOZERO,THRESH_TOZERO_INV]
for i in range(5):
plt.subplot(1,5,i+1)
plt.title(titles[i])
plt.imshow(images[i],"gray")
plt.xticks([])
plt.yticks([])
plt.show()
效果如下图所示:
消除图像中的噪声成分叫作图像的平滑化或滤波操作。
滤波:
def blur(src: Any,
ksize: Any,
dst: Any = None,
anchor: Any = None,
borderType: Any = None) -> None
1.均值滤波从频域来看,它是一种低通滤波器,高频信号会被滤掉。均值滤波可以帮助消除图像尖锐噪声,实现图像平滑,模糊等功能。理想的均值滤波是用每个像素和它周围像素计算出来的平均值替换图像中每个像素。
def boxFilter(src: Any,
ddepth: Any,
ksize: Any,
dst: Any = None,
anchor: Any = None,
normalize: Any = None,
borderType: Any = None) -> None
基本和均值滤波一样,可以选择归一化
第二个参数-1的意思就是输出图像的颜色通道数和输入是一样的。通常不需要去改。如果选择归一化normalize=True,那么就和均值滤波没什么区别。如果选择False后,进行操作的时候如果大于255,就直接取255。
高斯滤波的重要两步就是先找到高斯模板然后再进行卷积。模板中的数据是符合高斯分部的。
在卷积核大小的范围内,对原来图像像素值先进行排序,然后去中间的值当做像素点。(ksize的值一定是奇数,偶数会报错)
代码(包括如何生成椒盐图):
img_original = cv2.imread("dog.jpg")
img= cv2.resize(img_original,(440,540))
noise = 5000
img_noise= np.array(img)
for k in range(0,noise):
xi = int(np.random.uniform(0,img_noise.shape[1]))
xj = int(np.random.uniform(0,img_noise.shape[0]))
img_noise[xj,xi] = 0
cv2.imshow("img_rere",img_noise)
img_mblur = cv2.medianBlur(img_noise,3)
cv2.imshow("img_mblur",img_mblur)
cv2.waitKey(0)
1.图像二值化( Image Binarization): 就是将图像上的像素点的灰度值设置为0或255,也就是将整个图像呈现出明显的黑白效果的过程。在数字图像处理中,二值图像占有非常重要的地位,图像的二值化使图像中数据量大为减少,从而能凸显出目标的轮廓。
2.如果在代码中需要输出很多图,想把他们放在一起输出,那么就可以使用np.hstack(img1.img2,img3.....)
原文:https://www.cnblogs.com/yolo-m/p/14696036.html