2012-07-17 151 views
6

我一直在試圖找到檢測紙上4個黑色正方形的最佳方法,並使用它們將紙張分離出它自己的圖像。如何在使用OpenCV的紙張上檢測註冊標記?

enter image description here

+0

歡迎來到StackOverflow。你迄今爲止嘗試過哪些方法不適合你?你看過[這個問題](http://stackoverflow.com/q/11424002/62576),看看它是否有幫助?請顯示一些努力來解決這個問題(除了發佈圖片),並且這裏的某個人可能會幫忙。 – 2012-07-17 23:23:46

回答

6

看來你的圖像上只有4個黑方塊,所以你必須做的是:

  1. 轉換圖像灰度
  2. 待辦事項門檻
  3. 查找黑色輪廓(在OpenCV中執行此操作之前,您必須反轉圖像,因爲默認情況下OpenCV會發現白色輪廓)
  4. 循環遍歷這些輪廓並找到boundin g矩形。
  5. 執行檢查:

    A)矩形的面積越大,一些恆定(在我的解決辦法是)

    B)矩形的寬度/高度爲接近1.0(在我soultion它是[0.9,1.1]範圍)

的代碼:

Mat img = imread("test.jpg"), gray; 
vector<Vec4i> hierarchy; 
vector<vector<Point2i> > contours; 
cvtColor(img, gray, CV_BGR2GRAY); 
threshold(gray, gray, 100, 255, THRESH_BINARY); 
bitwise_not(gray, gray); 

findContours(gray, contours, hierarchy, CV_RETR_EXTERNAL, CV_CHAIN_APPROX_SIMPLE); 

for(size_t i=0; i<contours.size(); i++) 
{ 
    Rect rect = boundingRect(contours[i]); 
    double k = (rect.height+0.0)/rect.width; 
    if (0.9<k && k<1.1 && rect.area()>100) 
    { 
     drawContours(img, contours, i, Scalar(0,0,255)); 
    } 
} 

imshow("result", img); 
waitKey(); 

結果: enter image description here

又讀this SO discussion - 你不需要有4個平方檢測紙張。