2016-02-20 184 views
1

我是OpenCV的新手。首先,將物體放置在白紙上,然後使用機器人相機拍攝照片。在下一步中,我試圖使用OpenCV提取放置在白紙上的對象(查找輪廓和繪製輪廓)。我想爲我的機器人項目使用這個對象。OpenCV繪製輪廓和作物

實施例圖像:

example image

這是我嘗試的代碼:

int main(int argc, char* argv[]){ 

    int largest_area=0; 
    int largest_contour_index=0; 
    Rect bounding_rect; 

    // read the file from console 
    Mat img0 = imread(argv[1], 1); 

    Mat img1; 
    cvtColor(img0, img1, CV_RGB2GRAY); 

    // Canny filter 
    Canny(img1, img1, 100, 200); 

    // find the contours 
    vector< vector<Point> > contours; 
    findContours(img1, contours, CV_RETR_CCOMP, CV_CHAIN_APPROX_SIMPLE); 

    printf("%ld\n", contours.size()); 

    for(size_t i = 0; i< contours.size(); i++) // iterate through each contour. 
    { 
     double area = contourArea(contours[i]); // Find the area of contour 

     if(area > largest_area) 
     { 
      largest_area = area; 
      largest_contour_index = i;    //Store the index of largest contour 
      bounding_rect = boundingRect(contours[i]); // Find the bounding rectangle for biggest contour 
     } 
    } 

    cout << "contour " << contours.size() << endl; 
    cout << "largest contour " << largest_contour_index << endl; 

    Scalar color = Scalar(0,0,255); 
    drawContours(img0, contours, -1, color); 

    Mat roi = Mat(img0, bounding_rect); 

    // show the images 
    imshow("result", img0); 
    imshow("roi",roi); 

    imwrite("result.png",roi); 

    waitKey(); 
    return 0; 
} 

這繪製輪廓用於在照片中的所有對象。但是,我怎樣才能在白皮書上提取對象?比如在這個形象:

this image

我只想裁剪從圖像卡,但我不知道如何着手。誰能幫我嗎?

+0

我已經編輯我的問題,並加入我的碼。我認爲,所以我試圖在我的問題中清楚。如果您有任何問題,您可以詢問我是否仍然不清楚。 –

+0

感謝您糾正我的問題和我的英語@Alexey Kukanov –

+0

任何人都可以幫我解決問題嗎?我無法繼續我的項目,因爲我陷入了這個階段。 –

回答

1

應用源圖像上的ROI如圖所示:

Rect r=Rect(200,210,350,300) 
/*create a rectangle of width 350 and height 300 with x=200 and y=210 as top-left vertex*/ 
Mat img_roi=src(r); 

選擇矩形的適當尺寸應當從圖像中去除該白色片外部的區域