这个opencv代码有什么问题

时间:2013-07-18 06:37:53

标签: c++ opencv

我正在尝试编写一个代码,在其中我可以检测到除了正方形之外的不同几何形状,我发现:this answer here答案在python中给出,我尝试用c ++编写但我的程序崩溃了,任何想法我做错了什么:

int main (){
    cv::Mat img = cv::imread("src.jpg",0);
    cv::Mat image ;

    std::vector<std::vector<cv::Point>> contours;
    //std::vector<std::vector<cv::Point2f>> hiararchy;

        cv::threshold(img,img,127,255,CV_THRESH_BINARY_INV);
        cv::findContours(img,contours,/*hiararchy,*/CV_RETR_EXTERNAL,CV_RETR_CCOMP );
    std::vector<cv::Point2f> approx; 
    for ( int i=0; i<contours.size();i++){
        cv::approxPolyDP(cv::Mat(contours[i]),approx,cv::arcLength(cv::Mat(contours[i]),true)*0.02,true);

    }

    cv::waitKey(0);

    return 0;

}

我调试了程序,它在 cv :: approxPolyDP 函数中崩溃了!

**更新** 在C.CanberkBacı的建议之后,我改变了为l

for ( int i=0; i<contours.size();i++){
    cv::Mat m(contours[i]);
    cv::approxPolyDP(m,approx,cv::arcLength(m,true)*0.02,true);

}

但它没有太大变化 在此先感谢您的帮助!

2 个答案:

答案 0 :(得分:2)

得到了它:

int main (){
    cv::Mat img = cv::imread("src.jpg",0);
    cv::Mat image ;

    std::vector<std::vector<cv::Point>> contours;
    //std::vector<std::vector<cv::Point2f>> hiararchy;

        cv::threshold(img,img,127,255,CV_THRESH_BINARY_INV);
        cv::findContours(img,contours,/*hiararchy,*/CV_RETR_EXTERNAL,CV_RETR_CCOMP );
        std::vector<cv::Point> approx;   // this should be  1D
    for ( int i=0; i<contours.size();i++){

        cv::approxPolyDP(cv::Mat(contours[i]),approx,(cv::arcLength(cv::Mat(contours[i]),true)*0.02),true);

    }

    cv::waitKey(0);

再次感谢您的帮助

答案 1 :(得分:0)

我在使用drawContours()时遇到了类似的问题。我们需要确保Point类型与函数声明一致。如果它要求cv :: Point,那么传递cv :: Point2f将导致这个问题。