文档章节

opencv轮廓提取、轮廓识别相关要点

moki_oschina
 moki_oschina
发布于 2017/03/21 11:07
字数 353
阅读 51
收藏 1
点赞 0
评论 0

1、轮廓提取

复制代码

1 src = cv2.imread("***.jpg", cv2.IMREAD_COLOR)
2 gray = cv2.cvtColor(src ,cv2.COLOR_BGR2GRAY)
3 ret, binary = cv2.threshold(gray,100,255,cv2.THRESH_BINARY)
4 contours, hierarchy = cv2.findContours(binary,cv2.RETR_TREE,cv2.CHAIN_APPROX_SIMPLE)
5 cv2.drawContours(src,contours[32],-1,(0,0,255),1)
6 cv2.imshow("Src", src)

复制代码

其中,threshold函数第2参数,确定黑白分界点。除此之外,还有canny等方法,形成二值图。

drawContours的轮廓参数,可以是整个轮廓,也可是其中一个。

函数原型:

cv2.threshold(src, thresh, maxval, type[, dst]) → retval, dst

type:THRESH_BINARY, THRESH_BINARY_INV, THRESH_TRUNC, THRESH_TOZERO, THRESH_TOZERO_INV

cv2.findContours(image, mode, method[, contours[, hierarchy[, offset]]]) → contours, hierarchy

mode:CV_RETR_EXTERNALCV_RETR_LIST, CV_RETR_CCOMP, CV_RETR_TREE

method:CV_CHAIN_APPROX_NONE, CV_CHAIN_APPROX_SIMPLE, CV_CHAIN_APPROX_TC89_L1, CV_CHAIN_APPROX_TC89_KCOS

contours:轮廓多边形点群数据

hierarchy:

? hierarchy[idx][0] 返回同等级层次结构的下一个轮廓索引
? hierarchy[idx][1] 返回同等级层次结构的上一个轮廓索引
? hierarchy[idx][2] 返回第一个子轮廓的索引
? hierarchy[idx][3] 返回父轮廓的索引
如果其中一个轮廓不存在,返回索引为负值

cv2.drawContours(image, contours, contourIdx, color[, thickness[, lineType[, hierarchy[, maxLevel[, offset]]]]]) → None

2、轮廓对比

(1)轮廓矩对比

1 cv2.matchShapes(contours1[0], contours2[0], cv2.cv.CV_CONTOURS_MATCH_I1, 0.0)

函数原型:

cv2.matchShapes(contour1, contour2, method, parameter) → retval

method:CV_CONTOURS_MATCH_I1, CV_CONTOURS_MATCH_I2, CV_CONTOURS_MATCH_I3

(2)轮廓hist对比

1 hist1 = cv2.calcHist(src1, [0], None, [256], [0, 256])
2 hist2 = cv2.calcHist(src2, [0], None, [256], [0, 256])
3 print cv2.compareHist(hist1, hist2, cv2.cv.CV_COMP_BHATTACHARYYA)

函数原型:

cv2.calcHist(images, channels, mask, histSize, ranges[, hist[, accumulate]]) → hist

cv2.compareHist(H1, H2, method) → retval

本文转载自:http://www.cnblogs.com/lulu147/p/4869131.html

共有 人打赏支持
moki_oschina
粉丝 24
博文 179
码字总数 22482
作品 0
成都
程序员
OpenCV中几何形状识别与测量

经常看到有学习OpenCV不久的人提问,如何识别一些简单的几何形状与它们的颜色,其实通过OpenCV的轮廓发现与几何分析相关的函数,只需不到100行的代码就可以很好的实现这些简单几何形状识别与...

gloomyfish
04/16
0
0
我为什么要写《OpenCV Android 开发实战》这本书

我为什么要写《OpenCV Android 开发实战》这本书 2015年我出版了个人第一本关于图像处理方面的书籍《Java图像处理-编程技巧与应用实践》,这本书主要是从理论与编码上面详细阐述了图像处理基...

gloomyfish
07/06
0
0
【OpenCV入门指南】第七篇 线段检测与圆检测

【OpenCV入门指南】第七篇 线段检测与圆检测 在《【OpenCV入门指南】第五篇轮廓检测上》与《【OpenCV入门指南】第六篇轮廓检测下》讲解了OpenCV的轮廓检测。本篇将讲解在OpenCV中使用线段检测...

andyhe91
2014/12/17
0
0
qml+opencv(一)

前言 突然想起opencv,一直想做人脸识别,可是理论基础太水,只能慢慢来,去年学习了一会,然后公司让我去搞app和网络,就一直搁着,现在学习qml,突然想能不能在qml里面使用opencv,所以就有...

首席吹牛官
2015/05/22
0
0
Python黑科技:50行代码运用Python+OpenCV实现人脸追踪

嗨,我最亲爱的伙计们,很高兴我们又见面了。 首先先感谢朋友们的关注。当然我更希望认识与计算机相关的领域的朋友咱们一起探讨交流。重点说一下,我是真人,不是那些扒文章的自媒体组织,大...

雁横
04/29
0
0
用 OpenCV 检测图像中各物体大小

雷锋网 AI 研习社按:本文为雷锋网字幕组编译的技术博客,原标题为 Measuring size of objects in an image with OpenCV,作者为 Adrian Rosebrock 。 翻译 | 尘央 整理 | 孔令双 原文链接:...

雷锋字幕组
06/25
0
0
opencv中contourarea返回值与轮廓的真实面积

之前在写opencv的时候,发现contourarea的返回值并不是轮廓的真实面积,感觉世界观都被颠覆了哈哈哈.... 研究了一下,过程和结果如下: first 首先看一下官方的文档: 画红色框的地方很明显的...

sirius_0
05/12
0
0
基于OpenCV的iOS图像处理

关于图片处理 随着科技的发展,AI、机器学习、AR、VR等已经逐渐走进生活,模式识别、图像捕捉、图片拼接等已经成为其中的重要环节。因此,图像处理技术在未来会被移动端广泛使用。其中,有很...

无忌不悔
2017/09/06
0
0
19- OpenCV+TensorFlow 入门人工智能图像处理-刷脸识别实现

章节介绍 实现一个刷脸识别 输入一张图片,找到图片中的人脸,识别这个是哪一个人。 案例代码简单 人工网络层级低。 隐层只有一层。 综合: 样本收集 + 图像预处理 + TensorFlow神经网络 pyth...

天涯明月笙
05/19
0
0
图片人脸检测(OpenCV版)

图片人脸检测 人脸检测使用到的技术是OpenCV,上一节已经介绍了OpenCV的环境安装,点击查看. 功能展示 识别一种图上的所有人的脸,并且标出人脸的位置,画出人眼以及嘴的位置,展示效果图如下...

vipstone
05/21
0
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

Tomcat内存设置

第一步骤: 1、路径是Tomcat目录下的/bin/catalina.bat文件 打开catalina.bat文件 加入下面这句代码: set JAVA_OPTS=%JAVA_OPTS% -server -XX:PermSize=128M -XX:MaxPermSize=512m 2、路径是...

一梦心草
11分钟前
0
0
IDEA 及 Gradle 使用总结

IDEA 及 Gradle 使用总结 自动编译组件 目前Android开发的主流开发工具是 Eclipse 和 IDEA 目前主流的自动化打包工具时 ant,maven,gradle。 maven工具中有自己的依赖仓库维护,很多开源支持...

舒文joven
11分钟前
0
0
lombok 引入后,测试类始终找不到get,set方法。

开发环境为idea,jdk1.7,maven3.5. 网上直接搜出来的方法有: 1、在setting里安装lombok的plugins; 2、如下图,勾选enable annocation processing选项 3、升级maven plugins插件 我尝试了以...

Kidult
13分钟前
0
0
Duang,HUAWEI DevEco IDE全面升级啦

想感受全新UI带来的视觉及交互体验、 HiKey970开发板调测、 HiAI API推荐和收藏、 深度AI模型分析等新功能, 体验高清晰度和流畅度的远程AI真机调测吗? 全新的UI设计 采用最优秀的视觉及交互...

华为终端开放实验室
21分钟前
0
0
阻止事件冒泡,阻止默认事件

1.event.stopPropagation()方法 这是阻止事件的冒泡方法,不让事件向documen上蔓延,但是默认事件任然会执行,当你掉用这个方法的时候,如果点击一个连接,这个连接仍然会被打开, 2.event....

闫亚亚
23分钟前
0
0
网络监控工具类

package com.guorentong.learn.organ.utils;import android.app.Activity;import android.content.Context;import android.content.Intent;import android.net.ConnectivityManage......

王先森oO
24分钟前
0
0
命令

sudo nginx -s reload 重启nginx sudo lsof -i -P | grep -i "listen" 查看端口占用

那个猴子
27分钟前
0
0
用scrapy-redis爬去新浪-以及把数据存储到

需求:爬取新浪网导航页(http://news.sina.com.cn/guide/)所有下所有大类、小类、小类里的子链接,以及子链接页面的新闻内容。 准备工作: a.安装redis(windows或者linux) b.安装Redis Des...

丁典
28分钟前
0
0
PHP常用函数篇

1.为什么要使用函数? 除了内建的PHP函数,我们可以创建我们自己的函数。 函数是可以在程序中重复使用的语句块。 使代码逻辑更清晰 避免过多的全局变量 封装后避免相同逻辑重复代码,只需调用...

天地有涯风有信_大海无量不见人
29分钟前
0
0
对List分组

在日常工作中会遇到这样的情景,我们需要对List按照List中对象的一个值进行分组。比如一个Human的List,我们要根据性别分组,传统的方法是做双层循环,逐个对比,今天我要介绍一种详单简单的...

珂jack
30分钟前
0
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部