血管opencv的质心

时间:2018-09-28 10:38:09

标签: c++ opencv

我有这张图片the vascular bundle

我的工作是找到血管的质心,  我尝试过图像瞬间,但出现了此错误message error

我的代码在这里:

 int main() {
  cv::Mat img = imread("C:\\Users\\ASUS\\Desktop\\fond1.png ", CV_LOAD_IMAGE_COLOR);
     Mat blue, green, red, step1, otsu, step11, green1, blue1;
     Mat bgr[3];   //destination array
     split(img, bgr);//split source  
     red.push_back(bgr[2]);
        Moments mu = moments(red,true);
        Point center;
        center.x = mu.m10 / mu.m00;
        center.y = mu.m01 / mu.m00;
        circle(red, center, 2, Scalar(0, 0, 255));

        imshow("Result",red);
        Mat mask(red.size(), CV_8UC1, Scalar::all(0));
        // Create Polygon from vertices
        vector<Point> ROI_Vertices(3);
        ROI_Vertices.push_back(Point(0,0 ));
        ROI_Vertices.push_back(Point(center.x, center.y));
        ROI_Vertices.push_back(Point(0,red.rows -1));

        vector<Point> ROI_Poly;

        approxPolyDP(ROI_Vertices, ROI_Poly, 1.0, true);

        // Fill polygon white
        fillConvexPoly(mask, &ROI_Poly[0], ROI_Poly.size(), 255, 8, 0);


        Mat hide(red.size(), CV_8UC3);

        red.copyTo(hide, mask);

        imshow("mask", hide);

        Mat blackhat,tophat,dst;
        Mat element = getStructuringElement(MORPH_ELLIPSE, Size(6,6));
        morphologyEx(hide, blackhat, MORPH_BLACKHAT, element);
        imshow("step1", blackhat);
        morphologyEx(blackhat, tophat, MORPH_TOPHAT, element);
        imshow("step2", tophat);
        cv::Mat r1 = cv::Mat::zeros(dst.rows, dst.cols, CV_8UC1);
        tophat.copyTo(r1);
        imshow("vessel", r1);
        threshold(r1, dst, 9, 255, THRESH_BINARY);
    // Find contours
        vector<vector<Point>> contours;
        vector<Vec4i> hierarchy;
    ///Get the moments
        Mat canny_output;
        // detect edges using canny
        Canny(dst, canny_output, 50, 150, 3);
        // find contours
        findContours(canny_output, contours, hierarchy, RETR_TREE, CHAIN_APPROX_SIMPLE, Point(0, 0));

        // get the moments
        vector<Moments> mu(contours.size());
        for (int i = 0; i<contours.size(); i++)
        {
            mu[i] = moments(contours[i], false);
        }

        // get the centroid of figures.
        vector<Point2f> mc(contours.size());
        for (int i = 0; i<contours.size(); i++)
        {
            mc[i] = Point2f(mu[i].m10 / mu[i].m00, mu[i].m01 / mu[i].m00);
        }

0 个答案:

没有答案