簡體   English   中英

如何使用 iphone 在照片中找到矩形?

[英]How do I find a rectangle in a photo using iphone?

我需要從 iPhone 拍攝的照片中識別、旋轉和裁剪矩形(名片)。 我相信這可以通過使用 OpenCV 來完成,但我之前沒有使用過。 任何人都可以提供一些提示嗎?

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

  • 精度:低/高
  • 縱橫比:例如,如果您只想找到正方形,則為 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核心映像進展,Session 514。

來自 shinobicontrols.com 的示例

請參閱 opencv 示例代碼OpenCV2.2\samples\cpp\squares.cpp 他們執行以下操作:

  • 使用 Canny 檢測邊緣

  • 通過findContours檢索輪廓

  • 對於每個輪廓

    • 使用approxPolyDP近似輪廓以減少頂點數

    • 如果輪廓有 4 個頂點並且每個角度約為 90 度,則生成一個矩形

為了讓您開始,您應該查看 OpenCV 的特征檢測api。 尤其

  • cv::Canny (用於邊緣檢測),
  • 也許cv::cornerHarris (用於角點檢測),
  • cv::HoughLines (用於在邊緣圖像中查找直線)。

HTH

根據視點的不同,卡片最終可能不是矩形,而是更多的梯形。 您可以使用OpenCV中的 HoughLines2 來識別圖像中的邊緣,並嘗試識別最有可能是名片邊緣的 4 條邊緣。

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

  • Object 檢測:使用輪廓跟蹤進行組件標記。
  • 在所有對象都被標記后,然后通過計算矩形的周長過濾檢測到的組件。 P=2*(H+W) 任何尺寸小於或大於 P 的分量都被忽略,只保留大小接近 P 的分量。
  • 從輪廓點找到矩形的角點。
  • 從原始圖像中提取矩形。

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

我認為goodFeaturesToTrack()更容易用於 Harris-Corner 檢測。 CornerHarris()需要將輸出圖像設置為特定類型。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM