工作做
我嘗試檢測,並與這些步驟讀取車牌:
1)通過使用houghlines檢測四邊形(已經拿到了這個問題,這一步,對不起)
2)修正角度這個四邊形爲矩形
3)在這個矩形執行OCR
houghLines沒有檢測到正確的線條。如何糾正?
,你可以看到我的代碼here視覺問題/效果。
代碼本身可以找到here。
免責聲明:我爲此使用了Emgu CV,但如果有人友好地回答我,我不想打擾他或她給我一個具體的包裝答案。
public string loadImage()
{
OpenFileDialog ofd = new OpenFileDialog();
ofd.ShowDialog();
String s = ofd.FileName.Normalize();
return s;
}
public void processImage()
{
String s = loadImage();
Image<Gray, Byte> img = new Image<Gray, byte>(s);
Console.WriteLine("read file @" + s);
Image<Gray, Byte> tinyGrayImg = img.Resize(0.25, INTER.CV_INTER_NN);
CvInvoke.cvShowImage("original gray", tinyGrayImg);
Console.WriteLine("converted " + s + " to grayscale");
Image<Gray, Byte> canny = new Image<Gray, byte>(CvInvoke.cvGetSize(tinyGrayImg));
CvInvoke.cvCanny(tinyGrayImg, canny, 97, 225, 3);
CvInvoke.cvShowImage("canny", canny);
Console.WriteLine("applied Canny to " + s);
try
{
MemStorage mem = new MemStorage();
Image<Bgr, byte> linesImg = canny.Convert<Bgr, byte>();
IntPtr lines = CvInvoke.cvHoughLines2(canny, mem.Ptr, HOUGH_TYPE.CV_HOUGH_PROBABILISTIC, 1, Math.PI/ 180, 70, 30, 10);
Seq<LineSegment2D> segments = new Seq<LineSegment2D>(lines, mem);
LineSegment2D[] segArray = segments.ToArray();
for (int i = 0; i < segArray.Length; i++)
{
linesImg.Draw(segArray[i], new Bgr(Color.Red), 1);
}
CvInvoke.cvShowImage("lines", linesImg);
}
catch (Exception e)
{
MessageBox.Show(e.Message);
}
問題
正如你所附加的圖片中看到(我沒有直接將圖像添加足夠的因果報應)如我所料的HOUGH_PROBABILISTIC過濾器不工作,我不知道爲什麼邊緣的車牌不予認可。任何想法如何實現我的目標是值得歡迎的。
從這裏你可以嘗試線段檢測代碼: http://www.runmycode.org/CompanionSite/site.do?siteId=132 作爲Hough變換的替代品。 – GilLevi
說實話:C超過我的腦袋 –
請提供您的問題中的代碼,因爲未來可能會丟失外部鏈接。 –