OpenCV findTours函数及其用法

        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;	

试运行,结果如下:

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Bill66

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值