2012-03-21 172 views
1

我在Android上使用OpenCV進行車牌識別。作爲該過程的一部分,我使用Canny邊緣檢測來查找圖像中的邊緣。我遇到的問題是圖像中的水平邊緣沒有被檢測爲實線。的問題是,由於線不是固體我不能將其檢測爲一個輪廓Android OpenCV邊緣檢測

這是我正在運行上

enter image description here

此邊緣檢測圖像的邊緣檢測的結果。正如你所看到的,車牌的垂直邊緣已經被檢測爲實線,但水平線是虛線的。

enter image description here

這是我的代碼

 org.opencv.imgproc.Imgproc.Canny(snapshot.getImage(), dst, 
      Configurator.PlateDetectCannyThreshold1, 
      Configurator.PlateDetectCannyThreshold2, 
      Configurator.PlateDetectCannyApperture); 
    List<Mat> contours = new Vector<Mat>(); 
    org.opencv.imgproc.Imgproc.findContours(dst, contours, new Mat(), 
      org.opencv.imgproc.Imgproc.CV_RETR_LIST, 
      org.opencv.imgproc.Imgproc.CV_CHAIN_APPROX_SIMPLE, 
      new org.opencv.core.Point(0, 0)); 
+0

您在坎尼壞閾值。降低他們一點。 – Sam 2012-03-21 14:18:05

+0

我試過了。我應該提到我的上限是300,上面的圖像是下限是0,但是我已經將上面的圖像逐漸降低到0,並且沒有區別 – 2012-03-21 14:36:24

+0

上限應該設置在40左右的某個位置上120,下限爲0.4 *上限或上限/ 3。我認爲讀一點總是很好的。 google上的'wiki canny',以及閱讀canny如何工作。這很重要 – Sam 2012-03-21 14:42:34

回答

1

一個快速和骯髒溶液將使用如所描述的here形態學閉運算。

形態閉合操作有助於填補小缺口。

2

我遇到了類似的問題,當我實現文檔邊緣檢測和使用形態擴張邊緣更好的檢測:

Mat kernel = Imgproc.getStructuringElement(Imgproc.MORPH_DILATE, new Size(3,3), new Point(1,1)); 
Imgproc.dilate(mIntermediateMat, mIntermediateMat, kernel); 
+0

你能分享你執行的步驟嗎? – RBK 2016-10-12 08:47:39

+0

@RBK請參閱[Square Detectction](http://stackoverflow.com/questions/8667818/opencv-c-obj-c-detecting-a-sheet-of-paper-square-detection?rq=1)它非常好地描述了這些步驟。 – Shailesh 2016-10-13 16:47:47