我有一张黑白车牌图片。
它的外观如下:
现在我想为每个数字的背景着色,以便进一步完成工作 切割板上的数字。
像这样:
任何帮助将不胜感激。
答案 0 :(得分:7)
生成方框的一种简单方法是将sum图像向下移动到每列,并查找总和低于某个阈值的位置(即白色像素低于该列中给定数字的位置)。这将为您提供框应该在哪里的列索引。这些框的宽度可能太窄(即数字的小部分可能会突出两侧),因此您可以使用convolving索引向量扩展边缘,并使用一个小向量,并查找结果值大于零。以下是使用上图的示例:
rawImage = imread('license_plate.jpg'); %# Load the image
maxValue = double(max(rawImage(:))); %# Find the maximum pixel value
N = 35; %# Threshold number of white pixels
boxIndex = sum(rawImage) < N*maxValue; %# Find columns with fewer white pixels
boxImage = rawImage; %# Initialize the box image
boxImage(:,boxIndex) = 0; %# Set the indexed columns to 0 (black)
dilatedIndex = conv(double(boxIndex),ones(1,5),'same') > 0; %# Dilate the index
dilatedImage = rawImage; %# Initialize the dilated box image
dilatedImage(:,dilatedIndex) = 0; %# Set the indexed columns to 0 (black)
%# Display the results:
subplot(3,1,1);
imshow(rawImage);
title('Raw image');
subplot(3,1,2);
imshow(boxImage);
title('Boxes placed over numbers');
subplot(3,1,3);
imshow(dilatedImage);
title('Dilated boxes placed over numbers');
注意:上面的阈值处理可能是黑白图像可能是double类型(值为0或1),逻辑(也可能是值为0或1),或无符号8位整数(值为0或255)。您所要做的就是将N
设置为白色像素数,以用作识别包含数字部分的列的阈值。
答案 1 :(得分:0)
假设你有一个围绕字母的方框 - 它给你整体角度
将图像折叠成1d(可能有助于首先旋转它以使边界框水平)
然后查找此1d签名中字母之间的间隙,为您提供数字位置。如果您知道数字的位数和板的格式,它会有所帮助。