% 读取图像
img = imread('car_plate.jpg');
figure, imshow(img), title('原始图像');
% 步骤1:颜色分割定位车牌(适用于蓝底车牌)
hsv = rgb2hsv(img);
hue = hsv(:,:,1);
saturation = hsv(:,:,2);
% 设定蓝色阈值范围(可能需要调整)
blueMask = (hue >= 0.55 & hue <= 0.67) & (saturation >= 0.4);
% 形态学处理
se = strel('rectangle', [10, 20]);
blueMask = imclose(blueMask, se);
blueMask = imfill(blueMask, 'holes');
% 查找连通区域
stats = regionprops(blueMask, 'BoundingBox', 'Area', 'Centroid');
areas = [stats.Area];
[~, idx] = max(areas); % 假设最大区域为车牌
plateBB = stats(idx).BoundingBox;
% 裁剪车牌区域
plateImg = imcrop(img, plateBB);
figure, imshow(plateImg), title('车牌区域');
% 步骤2:预处理和二值化
grayPlate = rgb2gray(plateImg);
bwPlate = imbinarize(grayPlate, 'adaptive', 'Sensitivity', 0.6);
bwPlate = imcomplement(bwPlate); % 反转图像
bwPlate = bwareaopen(bwPlate, 50); % 去除小物体
% 步骤3:字符分割
% 垂直投影法
verticalProj = sum(bw