2013-07-23 118 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); 
    } 
} 
相关问题