当前位置: 首页 > news >正文

OpenCV findTours函数及其用法

        OpenCV的findTours函数的原型如下:

函数参数:

Image 输入图像,需8位单通道图像。非零像素被视为1。零像素保持为0,因  此图 像被视为二进制。您可以使用compareinRangethresholdadaptiveThresholdCanny等从灰度或彩色图像中创建二值图像。如果模式等于RETR_CCOMPRETR_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";}elsecout << conturs.size() << endl;RNG rng(0xFFFFFFFF);for (size_t i = 0; i < conturs.size(); i++){drawContours(res, conturs, i, Scalar(rng.uniform(0,255),rng.uniform(0,255),rng.uniform(0,255)),-1);//drawContours(src, conturs, i, Scalar(255,0,0));drawContours(src, conturs, i, Scalar(1));}imshow("Result", res);imshow("Result1", src);waitKey(0);
}

试运行结果如下:

该示例程序的源码已上传到CSDN,下载链接为:https://download.csdn.net/download/billliu66/89735238 


http://www.mrgr.cn/news/23850.html

相关文章:

  • Hive SQL子查询应用
  • springboot基础-Druid数据库连接池使用
  • [产品管理-4]:NPDP新产品开发 - 2 - 制定企业经营战略目标的结构化方法与工具
  • [Python]一文掌握Nuitka 参数语法详细介绍与示例
  • 7.科学计算模块Numpy(4)ndarray数组的常用操作(二)
  • WindTerm 2.6.1:全新版本,更强大,更便捷!
  • Web开发:ABP框架2——层次结构、ORM的使用、Webapi控制器的编写
  • 计算机网络:概述 - 计算机网络概述
  • c语言--力扣简单题目(删除排序链表中的重复元素)讲解
  • windows软件应该安装在哪里
  • 园区竞争十分激烈,各类园区网站美出天际啦。
  • 经验笔记:Web 浏览器存储手段
  • 告别繁琐,IsMyHdOK硬盘测速,即刻享受科技便利
  • 内网安全:反弹shell
  • 力扣题/回溯/单词搜索
  • vue2项目如何设置同样的接口第一次请求有效,如果第二次请求同样的接口,则不去请求,因为第一次请求还没有返回数据
  • Java代码审计篇 | ofcms系统审计思路讲解 - 篇3 | 文件上传漏洞审计
  • 100个候选人,没一个能讲明白什么是自动化框架?
  • Guitar Pro 8.2.1 Build 32 永久中文破解解锁版
  • Unity1 Prefab