OpenCV C ++断言失败调用drawContours

查理公园

我正在尝试找到最大的正方形并将其绘制在原始图像上。

当我打电话

drawContours(input,(screenCnt),-1,Scalar(255,0,0),3);

发生以下错误:

E / cv :: error():OpenCV错误:cv :: Mat cv :: InputArray :: getMat(int)const,文件/ build / master_pack-android / opencv / modules / core /中的断言失败(i <0)src / matrix.cpp,第1260行

我在Github和Google上发现了很多东西,但是找不到任何相关的解决方案。

您能帮助一个知道如何解决的人吗?

这是我的代码。(C ++)

bool compareContourAreas(vector<Point> contour1, vector<Point> contour2){
    double i = fabs(contourArea(Mat(contour1)));
    double j = fabs(contourArea(Mat(contour2)));
    return ( i < j );
}


        Mat &input = *(Mat *) matAddrInput;
        Mat &result = *(Mat *) matAddrResult;

        Mat gray;
        Mat edge;
        resize(input,input, cv::Size(), 0.75, 0.75);

        cvtColor(input,gray,CV_RGB2GRAY);
        GaussianBlur(gray,gray,Size(3,3),0);
        Canny(gray,edge,100,200,3, false);

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


        findContours(edge,contours,hierarchy,CV_RETR_LIST,CHAIN_APPROX_SIMPLE);
        sort(contours.begin(),contours.end(),compareContourAreas);

        vector<Point> approx;
        vector<Point> screenCnt;

        for(size_t i = 0; i < contours.size(); i++){
            approxPolyDP((Mat(contours[i])),approx,arcLength(Mat(contours[i]),true) * 0.02, true);
            if(approx.size() == 4){
                screenCnt = approx;
                break;
            }
        }
        if(screenCnt.size() != 0){
            drawContours(input,(screenCnt),-1,Scalar(255,0,0),3); << error
        }
三木

drawContours需要输入一系列轮廓,而不仅仅是单个轮廓。您可以在调用中直接创建数组,例如:

drawContours(input, std::vector<std::vector<cv::Point>>{screenCnt},-1,Scalar(255,0,0),3); 

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章