open cv+mfc , 编写凸包程序时遇到 "将一个无效参数传递给了将无效参数视为严重错误的函数" 问题。

VC2017+open cv+mfc , 编写凸包程序时遇到 "将一个无效参数传递给了将无效参数视为严重错误的函数" 问题。

img


凸包程序单独运行起来没问题,写到Mfc里,我自己先对图片灰度化二值化然后直接写入凸包程序,就出现了这种问题,很大可能是我书写问题,麻烦各位指点迷津,感激不尽!

void CMFC03Dlg::OnClickedButton11()
{
    // TODO: 在此添加控件通知处理程序代码
    Mat dst, bin, src2;
    int thre = 100;
    int threMax = 255;
    cv::cvtColor(Src, dst, COLOR_RGB2GRAY);
    threshold(dst, bin, thre, threMax, THRESH_BINARY);

    vector>contourPoints;
    vectorhierarchy;

    //bin.create(dst.rows, Src.cols, CV_8UC1);
    
    findContours(bin, contourPoints, hierarchy, RETR_TREE, CHAIN_APPROX_SIMPLE, Point(0, 0));
    vector>convexs(contourPoints.size());
    vectorempty(0);

    for (size_t i = 0; i < contourPoints.size(); i++)
    {
        convexHull(contourPoints[i], convexs[i], true, false);
    }

    RNG rng(12345);
    src2 = Mat::zeros(dst.size(), CV_8UC3);
    for (size_t k = 0; k < contourPoints.size(); k++)
    {
        Scalar color = Scalar(rng.uniform(0, 255), rng.uniform(0, 255), rng.uniform(0, 255));
        Scalar color2 = Scalar(0, 255, 0);
        drawContours(src2, contourPoints, k, color, 2, LINE_8, hierarchy, 0, Point(0, 0));
        drawContours(src2, convexs, k, color2, 2, LINE_8, empty, 0, Point(0, 0));
    }

    IplImage *frame;
    IplImage Image = IplImage(src2);
    frame = &Image;
    ShowImage(frame, IDC_STATIC1);

}

将RETR_TREE 改成 RETR_CCOMP
在找轮廓前先将bin存一下,看imwrite出来的图是正常的再findcontours