一、高斯金字塔
import cv2
import matplotlib.pyplot as plt
import numpy as np
img = cv2.imread('./cat.jpg', cv2.IMREAD_COLOR)
b, g, r = cv2.split(img)
img = cv2.merge((r, g, b))
pyrup = cv2.pyrUp(img) #向上采样
pyrdown = cv2.pyrDown(img) #向下采样
plt.figure()
plt.subplot(1, 3, 1)
plt.imshow(img, 'gray')
plt.title('ORIGINAL')
plt.subplot(1, 3, 2)
plt.imshow(pyrup, 'gray')
plt.title('PYRUP')
plt.subplot(1, 3, 3)
plt.imshow(pyrdown, 'gray')
plt.title('PYRDOWN')
plt.show()
二、拉普拉斯金字塔
三、图像轮廓
cv2.findContours(img, mode, method)
mode:轮廓检测模式
### RETR_EXTERNAL:只检测最外面的轮廓
### RETR_LIST:检测所有轮廓,并将其保存到链表中
### RETR_CCOMP:检测所有轮廓,并将他们组织为两层:顶层是各部分的外部边界,第二层是空洞的边界
### RETR_TREE:检测所有轮廓,并重构嵌套轮廓的整个层次 (!!通常用这个)
method:轮廓逼近方法
### CHAIN_APPROX_NONE:以Freeman链码方式输出轮廓,所有其他方法输出多边形
### CHAIN_APPROX_SIMPLE:压缩水平的、垂直的和斜的部分,也就是,函数只保留他们的终点部分
import cv2
import matplotlib.pyplot as plt
import numpy as np
img = cv2.imread('./graph.png', cv2.IMREAD_COLOR)
img = cv2.resize(img, (0, 0), fx=0.25, fy=0.25)
#转换成二值图方便计算
gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
ret, thresh = cv2.threshold(gray, 100, 255, cv2.THRESH_BINARY)
binary, contours, hierarchy = cv2.findContours(thresh, cv2.RETR_TREE, cv2.CHAIN_APPROX_NONE)
#绘制轮廓
draw_img = img.copy()
res = cv2.drawContours(draw_img, contours, -1, (0, 0, 255), 2) #-1:绘制全部,2:线条宽度
def transform(img):
b, g, r = cv2.split(img)
return cv2.merge((r, g, b))
plt.figure()
plt.subplot(1, 3, 1)
plt.imshow(transform(img), 'gray')
plt.title('ORIGINAL')
plt.subplot(1, 3, 2)
plt.imshow(thresh, 'gray')
plt.title('THRESH')
plt.subplot(1, 3, 3)
plt.imshow(transform(res), 'gray')
plt.title('RES')
plt.show()
四、轮廓特征
#轮廓特征
cnt = contours[0]
print(cv2.contourArea(cnt)) #计算面积
print(cv2.arcLength(cnt, True)) #计算周长,True表示闭合
五、轮廓近似
#轮廓近似
epsilon = 0.1*cv2.arcLength(cnt, True) #近似参考长度
approx = cv2.approxPolyDP(cnt, epsilon, True)
draw_img = img.copy()
res = cv2.drawContours(draw_img, [approx], -1, (0, 0, 255), 2)
cv2.imshow('title', res)
cv2.waitKey(0)
cv2.destroyAllWindows()
六、边界矩形
x, y, w, h = cv2.boundingRect(cnt)
res = cv2.rectangle(draw_img, (x, y), (x+w, y+h), (0, 0, 255), 2)