OpenCV findTours函数及其用法

发布于:2024-08-23 ⋅ 阅读:(88) ⋅ 点赞:(0)

        OpenCV findTours函数主要用以寻找图像中物体的轮廓,其原型如下:

indTours 函数参数:

        Image 输入图像,需8位单通道图像。非零像素被视为1。零像素保持为0,因  此图 像被视为                     二进制。您可以使用compareinRangethresholdadaptiveThresholdCanny等                       从灰度或彩色图像中创建二值图像。如果模式等于RETR_CCOMP或                                               RETR_FLOODILL,则输入也可以是32位整数图像(CV_32SC1)。

        Conturs 检测到的轮廓。每个轮廓都存储为点的向量(例如std:vector<std::                                              vector<cv:: Point>>)。

        Hierarchy 可选输出向量(例如std:vector<cv:Vec4i>),包含有关图像拓扑的信息。它                             的元素数量与轮廓的数量一样多。对于每个第i个轮廓[i],元素层次[i][0]、层次[i]                               [1]、层次[i][2]和层次[i][3]分别设置为相同层次级别的下一个和前一个轮廓、第一个                             子轮廓和父轮廓的轮廓中基于0的索引。如果轮廓i没有下一个、上一个、父轮廓                               或嵌套轮廓,则层次[i]的相应元素将为负。

        method  轮廓近似法,有以下几种:

        offset 每个轮廓点偏移的可选偏移量。如果轮廓是从图像ROI中提取的,然后应该在整个图像                     上下文中进行分析,那么这就很有用。

        用法示例:

        新建一个对话框程序,在程序中加入如下代码:

#include<sstream>
#include <iostream>
#include <opencv2/opencv.hpp>

using namespace cv;
using namespace std;

int main(int argc, char** argv)
{
    Mat src = imread("1.jpg");
    
    cout << src.type() << "\t"<< src.channels() << "\t"  << src.rows << "\t"  << src.cols <<endl;
    //imshow("Input Image", src);
    Mat src1;
    cvtColor(src, src1, COLOR_RGBA2GRAY);
    Mat erodeimg;
    Mat  kernel = getStructuringElement(MORPH_RECT, Size(5, 5));
    erode(src1,erodeimg,kernel);

    Mat blurimg;
    medianBlur(erodeimg, blurimg, 33);

    Mat threimg;
    threshold(blurimg, threimg, 80, 255, THRESH_BINARY);
    imshow("threshold result", threimg);

    vector<vector<Point>> conturs;
    vector<Vec4i> hierarchy;
    Mat res = Mat::zeros(src.size(),CV_8UC3);
    findContours(threimg, conturs, hierarchy,RETR_EXTERNAL, CHAIN_APPROX_SIMPLE);
    //findContours(threimg, conturs, NULL, CHAIN_APPROX_SIMPLE);
    if (conturs.size() == 0)
    {
        cout << "No objiect is found\n\t";
    }
    else
        cout << conturs.size() << endl;	

试运行,结果如下:


网站公告

今日签到

点亮在社区的每一天
去签到