1.图像读取与转换
import cv2
color_img = cv2.imread('image.jpg')
gray_img = cv2.imread('image.jpg', cv2.IMREAD_GRAYSCALE)
cv2.IMREAD_COLOR : 彩色图像(默认)
cv2.IMREAD_GRAYSCALE : 灰度图像
cv2.IMREAD_UNCHANGED : 包含alpha通道2.彩色图与灰度图转换
(1)彩色图转灰度图
gray_from_color = cv2.cvtColor(color_img, cv2.COLOR_BGR2GRAY)
(2)灰度图转"伪彩色图"(单通道转三通道,但仍然是灰度)
pseudo_color = cv2.cvtColor(gray_img, cv2.COLOR_GRAY2BGR)
(3) BGR转RGB(用于显示)
rgb_img = cv2.cvtColor(color_img, cv2.COLOR_BGR2RGB)
(4) BGR转HSV
hsv_img = cv2.cvtColor(color_img, cv2.COLOR_BGR2HSV)
(5)BGR转LAB
lab_img = cv2.cvtColor(color_img, cv2.COLOR_BGR2LAB)
显示图像
cv2.imshow('Color Image', color_img)
cv2.imshow('Gray Image', gray_img)
等待按键
cv2.waitKey(0)
cv2.destroyAllWindows()
3.通道分离与合并
def channel_operations():
img = cv2.imread('image.jpg')
(1)分离BGR通道
b, g, r = cv2.split(img)
(2)显示各个通道
cv2.imshow('Blue Channel', b)
cv2.imshow('Green Channel', g)
cv2.imshow('Red Channel', r)
(3) 创建单通道图像(只显示红色)
red_only = cv2.merge([np.zeros_like(b), np.zeros_like(g), r])
(4) 合并通道
merged = cv2.merge([b, g, r])
cv2.imshow('Red Only', red_only)
cv2.imshow('Merged', merged)
cv2.waitKey(0)
4.识别
def license_plate_preprocess():
读取图像
img = cv2.imread('car.jpg')
转换为灰度图
gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
高斯模糊去噪
blurred = cv2.GaussianBlur(gray, (5, 5), 0)
边缘检测
edges = cv2.Canny(blurred, 50, 150)
形态学操作(连接边缘)
kernel = np.ones((3,3), np.uint8)
closed = cv2.morphologyEx(edges, cv2.MORPH_CLOSE, kernel)
寻找轮廓
contours, _ = cv2.findContours(closed, cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_SIMPLE)
在原图上绘制轮廓
result = img.copy()
cv2.drawContours(result, contours, -1, (0, 255, 0), 2)
显示处理过程
cv2.imshow('Original', img)
cv2.imshow('Gray', gray)
cv2.imshow('Edges', edges)
cv2.imshow('Result', result)
cv2.waitKey(0)