骨架后霍夫变换出错

时间:2020-09-29 13:01:14

标签: c++ opencv

我正在尝试确定一个风力涡轮机,为确保不会出现太多行,我使用了骨架方法将所有内容都做成一行。 我遇到的问题是,与我的骨架输出相比,基于某种原因的Hough变换在很多行上都能看到。
我究竟做错了什么?我尝试将骨架转换为精巧的图像,但这只会使情况变得更糟。下面是代码和图像输出。

// -------- gray scaling ----------
    Mat BW1;
    cvtColor(frame, BW1, COLOR_BGR2GRAY);
    //cv::threshold(img, img, 127, 255, cv::THRESH_BINARY);
    cv::Mat skel(BW1.size(), CV_8UC1, cv::Scalar(0));
    cv::Mat temp;
    cv::Mat eroded;

    cv::Mat element = cv::getStructuringElement(cv::MORPH_CROSS, cv::Size(3, 3));
    bool done;
    int iterations=0;
    do
    {
        erode(BW1, eroded, element);
        dilate(eroded, temp, element);
        subtract(BW1, temp, temp);
        bitwise_or(skel, temp, skel);
        eroded.copyTo(BW1);

        done = (countNonZero(BW1) == 0);
        iterations++;

    } while (!done && (iterations < 25));
    //------- Dilate -------------//
    Mat BW1_5;
    dilate(skel,BW1_5,element);
    imshow("bw1.5: skeleton", BW1_5);
    //-------Hough lines----------//
    Mat HLT1 = frame;
    vector<Vec4i> lines;
    HoughLinesP( BW1_5, lines, 1, CV_PI/360, 50, 50, 10 );
    for(auto & i : lines)
    {
        line(HLT1, Point(i[0], i[1]), Point(i[2], i[3]), Scalar(0, 0, 255), 2, LINE_AA );
    }
    imshow("bw1.5: Hough lines", HLT1);

Output Frames

0 个答案:

没有答案