2013-03-20 73 views
2

我想在OpenCV中使用C++實現抓取算法 我偶然發現了this site,發現了一個非常簡單的方法。不幸的是,它似乎代碼不工作對我來說OpenCV抓取算法示例不工作

#include "opencv2/opencv.hpp" 
#include <iostream> 

using namespace cv; 
using namespace std; 

int main() 
{ 
// Open another image 
    Mat image; 
    image= cv::imread("images/mango11a.jpg"); 

    // define bounding rectangle 
    cv::Rect rectangle(50,70,image.cols-150,image.rows-180); 

    cv::Mat result; // segmentation result (4 possible values) 
    cv::Mat bgModel,fgModel; // the models (internally used) 

    // GrabCut segmentation 
    cv::grabCut(image, // input image 
        result, // segmentation result 
          rectangle,// rectangle containing foreground 
          bgModel,fgModel, // models 
          1,  // number of iterations 
          cv::GC_INIT_WITH_RECT); // use rectangle 
    cout << "oks pa dito" <<endl; 
    // Get the pixels marked as likely foreground 
    cv::compare(result,cv::GC_PR_FGD,result,cv::CMP_EQ); 
    // Generate output image 
    cv::Mat foreground(image.size(),CV_8UC3,cv::Scalar(255,255,255)); 
    image.copyTo(foreground,result); // bg pixels not copied 

    // draw rectangle on original image 
    cv::rectangle(image, rectangle, cv::Scalar(255,255,255),1); 
    cv::namedWindow("Image"); 
    cv::imshow("Image",image); 

    // display result 
    cv::namedWindow("Segmented Image"); 
    cv::imshow("Segmented Image",foreground); 


    waitKey(); 
    return 0; 
} 

任何人都可以幫我這個嗎?什麼應該是問題 PS:在編譯時打印沒有錯誤。

+0

你的代碼對我來說看起來很好。你確定你的圖片位於正確的文件夾?你的圖像是否大於150x180像素?否則,你正在圖像區域外定義一個矩形。 – kadav3r 2013-03-21 07:26:17

+0

是的,我的圖像是930 X 700,並且圖像位於正確的文件夾中,因爲我現在已經使用相同的圖像很長時間了。我嘗試在命令提示符下打印,並在grabcut函數調用之後,cout似乎沒有實現。 – Mark 2013-03-21 10:15:14

回答

1

再次檢查您的設置。我剛剛執行了相同的教程,對我來說工作得很好。 enter image description here