1.OpenCv基础
import numpy as np
import cv2 as cv
# 读取图片
original = cv.imread('../data/ml_data/forest.jpg')
cv.imshow('Original', original)
# 显示图片某个颜色通道的图像
blue = np.zeros_like(original)
blue[:, :, 0] = original[:, :, 0] # 蓝色通道
cv.imshow('Blue', blue)
green = np.zeros_like(original)
green[:, :, 1] = original[:, :, 1] # 绿色通道
cv.imshow('Green', green)
red = np.zeros_like(original)
red[:, :, 2] = original[:, :, 2] # 红色通道
cv.imshow('Red', red)
# 图像裁剪
height, width = original.shape[:2]
print(height, width)
l, t = width//4, height//4
r, b = 3*width//4, 3*height//3
cropped = original[t: b, l: r]
cv.imshow('Cropped', cropped)
# 缩放,线性插值
scare1 = cv.resize(original, (width//4, height//4), interpolation=cv.INTER_LINEAR)
cv.imshow('Scare1', scare1)
scare2 = cv.resize(scare1, None, fx=4, fy=4, interpolation=cv.INTER_LINEAR)
cv.imshow('Scare2', scare2)
# cv.waitKey()
# 图像保存
cv.imwrite('scare.jpg', scare2)
2.边缘检测
import cv2 as cv
# original = cv.imread('../data/ml_data/chair.jpg', cv.IMREAD_GRAYSCALE)
# cv.imshow('Original', original)
# # 水平方向索贝尔边缘检测
# h_sobel = cv.Sobel(original, cv.CV_64F, 0, 1, ksize=5)
# cv.imshow('H_sobel', h_sobel)
#
# v_sobel = cv.Sobel(original, cv.CV_64F, 1, 0, ksize=5)
# cv.imshow('V_sobel', v_sobel)
#
# # 拉普拉斯边缘检测
# laplacian = cv.Laplacian(original, cv.CV_64F)
# cv.imshow('Laplacian', laplacian)
#
# # Canny边缘检测
# canny = cv.Canny(original, 50, 240)
# cv.imshow('Canny', canny)
# 亮度提升
original = cv.imread('../data/ml_data/sunrise.jpg')
cv.imshow('Original', original)
# 转灰度图
gray = cv.cvtColor(original, cv.COLOR_BGR2GRAY)
cv.imshow('Gray', gray)
# 直方图均衡化,亮点提升
equalized_gray = cv.equalizeHist(gray)
cv.imshow('Equalized_gray', equalized_gray)
# yuv:亮度,色度,饱和度
yuv = cv.cvtColor(original, cv.COLOR_BGR2YUV)
yuv[..., 0] = cv.equalizeHist(yuv[..., 0])
equalized_color = cv.cvtColor(yuv, cv.COLOR_YUV2BGR)
cv.imshow('Equalized_color', equalized_color)
cv.waitKey()
# 角点检测
original = cv.imread('../data/ml_data/box.png')
cv.imshow('Original', original)
gray = cv.cvtColor(original, cv.COLOR_BGR2