2

我正在尝试编写一个代码,在该代码中我可以检测除正方形以外的不同几何形状,我发现:这个答案在这里 答案是用 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. Canberk Ba​​cı 的建议下,我已经改变了 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);
    
}

但它并没有改变很多提前感谢您的帮助!

4

2 回答 2

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);

再次感谢您的帮助

于 2013-07-18T07:22:34.827 回答
0

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

于 2017-01-09T17:10:16.120 回答