接着前面那篇文章,继续讲解opencv-python的基本编程操作
目录
1.图像阈值的处理
2.图像平滑处理
3.图像形态学操作
4.梯度计算
5.canny边缘检测算法
6.图像轮廓检测方法
7.模板匹配
8.金字塔的制作方法
1.图像阈值的处理
格式 ret,dst = cv2.threshold(src,thresh,maxval,type)
括号中src为输入图像,只能是灰度图:dst为输出图;thresh为阈值;maxval为当像素超过阈值(或者小于阈值,由type决定),所赋予的值;
import cv2
import numpy as np
import matplotlib.pyplot as plt
#读取下我的图片(eye)
img = cv2.imread("eye.png")
cv2.imshow('img',img)
cv2.waitKey(1000)
#阈值处理
ret, thresh1 = cv2.threshold(img,127,255,cv2.THRESH_BINARY) #超过阈值部分取最大值,否则取o
ret, thresh2 = cv2.threshold(img,127,255,cv2.THRESH_BINARY_INV) #上面的反转(INV)表示反转
ret, thresh3 = cv2.threshold(img,127,255,cv2.THRESH_TRUNC) #大于阈值部分设为阈值,否则不变
ret, thresh4 = cv2.threshold(img,127,255,cv2.THRESH_TOZERO) #大于阈值部分不改变,否则为0
ret, thresh5 = cv2.threshold(img,127,255,cv2.THRESH_TOZERO_INV) #上面的反转
#展示结果
cv2.imshow('1',thresh1)
cv2.waitKey(1000)
cv2.imshow('2',thresh2)
cv2.waitKey(1000)
cv2.imshow('3',thresh3)
cv2.waitKey(1000)
cv2.imshow('5',thresh4)
cv2.waitKey(1000)
cv2.imshow('5',thresh5)
cv2.waitKey(1000)
结果
2.图像平滑处理
#图像平滑处理
# 1.均值滤波
blur = cv2.blur(img, (3,3)) #(3,3)表示选取像素点周围3x3范围的矩阵处理,一般为奇数
# 2.方框滤波 (基本和均值一样,可以选择归一化)
box = cv2.boxFilter(img,-1,(3,3),normalize=True) # -1 表示一致性 ,若 normalize=False 则不符合的像素值会为255
# 3.高斯滤波
aussian = cv2.GaussianBlur(img,(5,5),1)
#4.中值滤波
median = cv2.medianBlur(img, 5)
#展示全部图像
res = np.hstack((blur,aussian,median))
cv2.imshow('median vs average', res)
cv2.waitKey(0)
cv2.destroyWindow()
3.图像形态学操作
腐蚀操作及膨胀操作
# 图像形态学操作
import cv2
import numpy as np
import matplotlib.pyplot as plt
img = cv2.imread("pic1.png")
cv2.imshow('img',img)
cv2.waitKey(1000)
img2 = cv2.imread("pic2.png")
cv2.imshow('img2',img2)
cv2.waitKey(1000)
# 腐蚀操作
#kernel = np.ones((3,3),np.uint8) #设定kernel为一个核
#erosion = cv2.