2013-07-23 117 views
-2

我想點的每一個載體進入像矩陣:從性病::向量<性病::矢量<cv::Point>>到CV ::墊

std::vector<std::vector<cv::Point>> vec; 
...................... 
for (int i ; i < vec.size();i++){ 
    imshow("stuff", cv::Mat(vec[i]); /// this crashes !!! 
} 

任何想法如何做到這一點? 在此先感謝

+0

請仔細複製粘貼! imshow之後的括號沒有關閉! – hivert

+0

也許你的cv :: Mat的拷貝構造函數有問題,你的參數是通過引用傳遞的? – minicaptain

+0

如果你只是想看到他們的答案是在那裏。 – Khashayar

回答

3

imshow查找完整的圖片。

通過將輪廓投射到墊子上,您不會有圖片。 你可以做的是:(SRC是你的圖片)

src = imread(argv[1], 1); 

    /// Convert image to gray and blur it 
    cvtColor(src, src_gray, CV_BGR2GRAY); 
    blur(src_gray, src_gray, Size(3,3)); 

    Mat canny_output; 
    vector<vector<Point> > contours; 
    vector<Vec4i> hierarchy; 

    /// Detect edges using canny 
    Canny(src_gray, canny_output, thresh, thresh*2, 3); 
    /// Find contours 
    findContours(canny_output, contours, hierarchy, CV_RETR_TREE, CV_CHAIN_APPROX_SIMPLE, Point(0, 0)); 



    /// Draw contours 

    for(int i = 0; i< contours.size(); i++) 
    { 
     Mat test_image = Mat::zeros(canny_output.size(), CV_8UC3); 
     Scalar color = Scalar(rng.uniform(0, 255), rng.uniform(0,255), rng.uniform(0,255)); 
     drawContours(test_image, contours, i, color, 2, 8, hierarchy, 0, Point()); 
     imshow("test",test_image); 
     waitKey(); 
    } 
+0

我應該如何定義層次結構和最後一個參數Point ??? – Engine

+0

用完整代碼編輯答案 – Khashayar

0

你可以這樣說:

void draw_contour(cv::Mat &dst_img, const std::vector<cv::Point> &contour, const cv::Scalar &color) 
{ 
    for (auto &point: contour) 
    { 
    dst_img.at<unsigned char>(point) = color; 
    } 
} 

或者,如果你正在使用的輪廓近似:

void draw_contour(cv::Mat &dst_img, const std::vector<cv::Point> &contour, const cv::Scalar &color) 
{ 
    for (unsigned i = 0; i < contour.size(); ++i) 
    { 
    cv::line(dst_img, contour[i], contour[(i + 1) % contour.size(), color); 
    } 
} 
相關問題