2011-05-26 48 views

回答

8

參見OpenCV的示例代碼OpenCV2.2\samples\cpp\squares.cpp。他們執行以下操作:

  • 用Canny

    檢測邊緣
  • 通過findContours

  • 檢索輪廓對於每個輪廓

    • 使用approxPolyDP減少頂點

      大致輪廓

    • 如果輪廓具有4個頂點,並且每個角度爲〜90度,則產生一個矩形

+0

我不明白的是,如果在某些地方背景可能接近前景色,我怎麼還能找到給出原始圖像信息的邊緣是一個矩形。 – TiansHUo 2011-05-26 06:53:36

+0

這是一個有趣的問題。似乎沒有通用的解決方案。首先出現在我的腦海中:如果您有關於目標對象的一些先驗信息(例如顏色直方圖或紋理特徵),那麼您可以高概率地定位包含目標的圖像區域,並將邊界輪廓設置爲初始猜測,然後應用活動輪廓法來改善結果 – Andrey 2011-05-26 07:53:46

2

爲了讓您一開始,你應該看看feature detection API的OpenCV。特別是

  • cv::Canny(用於邊緣檢測),
  • 也許cv::cornerHarris(轉角檢測),
  • cv::HoughLines(用於求出邊緣圖像中的直線)。

HTH

1

根據不同的觀點,該卡可能最終不是一個矩形,但更多的是梯形的。您可以在OpenCV中使用HoughLines2來識別圖像中的邊緣,並嘗試識別最有可能成爲名片邊緣的4條邊線。

+0

你說的除了旋轉之外,我還需要歪斜照片?我正在考慮照相機通常面對名片的情況 – TiansHUo 2011-05-26 06:36:18

1

我認爲goodFeaturesToTrack()是更容易使用哈里斯 - 角點檢測。 CornerHarris()需要設置outout圖像爲特定類型。使用輪廓跟蹤區域標記:

2

如果知道矩形的大致高度和寬度,則可以執行以下步驟:

  • 物體檢測。
  • 所有對象都被標記後,通過計算矩形的周長來過濾檢測到的組件。 P = 2 *(H + W) 忽略大小小於或大於P的任何分量,只保留大小接近P的分量。
  • 從輪廓點查找矩形的角點。
  • 從原始圖像中提取矩形。

以上所有步驟都可以使用OpenCV或Aforge.Net完成,我親自使用Aforge.Net完成。

14

的iOS 8,你現在可以使用新的檢測CIDetectorTypeRectangle返回CIRectangleFeature。 您可以添加選項:

  • 精度:低/ HIGHT
  • 長寬比:1.0,如果你想找到

    CIImage *image = // your image 
    NSDictionary *options = @{CIDetectorAccuracy: CIDetectorAccuracyHigh, CIDetectorAspectRatio: @(1.0)}; 
    CIDetector *rectangleDetector = [CIDetector detectorOfType:CIDetectorTypeRectangle context:nil options:options]; 
    
    NSArray *rectangleFeatures = [rectangleDetector featuresInImage:image]; 
    
    for (CIRectangleFeature *rectangleFeature in rectangleFeatures) { 
        CGPoint topLeft = rectangleFeature.topLeft; 
        CGPoint topRight = rectangleFeature.topRight; 
        CGPoint bottomLeft = rectangleFeature.bottomLeft; 
        CGPoint bottomRight = rectangleFeature.bottomRight; 
    } 
    

更多信息WWDC 2014 Advances in Core Image, Session 514.

例如只正方形

An example from shinobicontrols.com

相關問題