• 轮廓发现


    轮廓发现是基于图像边缘提取寻找对象轮廓的方法,所以边缘提取的阈值选定会影响最终的轮廓发现结果

    cv::findContours()

    InputOutputArray binImg//输入图像,非0像素被看成1,0的像素值保持不变8-bit

    OutputArrayOfArrays contours//全部发现的非轮廓对象

    OutputArray hierachy//图的拓卜结构

    int mode//轮廓的返回模式

    int method//发现方法

    Point offset=Point()//轮廓位移,默认是0

    cv::drawContours()

    InputOutputArray image表示目标图像,

    InputArrayOfArrays contour表示输入的轮廓组,每一组轮廓由点vector构成,

    int contourIdx指明画第几个轮廓,如果该参数为负值,则画全部轮廓,

    const Scalar& color为轮廓的颜色,

    int thickness为轮廓的线宽,如果为负值或CV_FILLED表示填充轮廓内部,

    int lineType为线型,

    InputArray hierarchy为轮廓结构信息,

    int maxLevel为maxLevel

    Point offset=Point()//轮廓位移,默认是0

    流程:

    彩图转灰度图

    灰度图转二值图像

    发现轮廓

    绘制轮廓

    #include"pch.h"
    #include<iostream>
    #include<math.h>
    #include<opencv2/opencv.hpp>
    
    using namespace std;
    using namespace cv;
    
    Mat gray_pic;
    int threshold_value = 100;
    int threshold_max = 255;
    void DemoContours(int, void*);
    int main(int argc, char**argv)
    {
        Mat src, dst;
        src = imread("2.jpg");
        namedWindow("output window", CV_WINDOW_AUTOSIZE);
        imshow("output window", src);
        cvtColor(src, gray_pic, COLOR_BGR2GRAY);
        createTrackbar("Threshold value", "output window", &threshold_value, threshold_max, DemoContours);
        DemoContours(0, 0);
        waitKey(0);
        return 0;
    }
    
    void DemoContours(int, void*)
    {
        Mat canny_output;
        vector<vector<Point>> points;
        vector<Vec4i>hierachy;
        Canny(gray_pic, canny_output, threshold_value, threshold_value * 2, 3, false);
        findContours(canny_output, points, hierachy, RETR_TREE, CHAIN_APPROX_SIMPLE, Point(0, 0));
        Mat dst = Mat::zeros(gray_pic.size(), CV_8UC3);
        RNG rng(12345);
        for (size_t i = 0; i < points.size(); ++i)
        {
            Scalar color = Scalar(rng.uniform(0, 255), rng.uniform(0, 255), rng.uniform(0, 255));
            drawContours(dst, points, i, color, 2, 8, hierachy, 0, Point(0, 0));
        }
        imshow("rslt", dst);
    }

  • 相关阅读:
    分布式
    pytest+allure+jenkins
    Pytest-参数化和unittest-ddt的对比(两种数据驱动的对比)
    pytest- fixture个人理解总结
    os路径拼接时,比如os.path.join(base_dir,"Outputslogs")后半段斜杠请小心被识别为转义字符,所以请用/,因为windows都能识别到此路径。
    python中如何获取当前时间,并计算时间差
    Web UI自动化测试-滚动条操作
    java 基础 1.什么是Java?2.Java语言的特点?
    java 排序3 插入排序
    java 排序2 冒泡排序
  • 原文地址:https://www.cnblogs.com/wangtianning1223/p/13352584.html
Copyright © 2020-2023  润新知