文档章节

opencv+python 提取国徽轮廓

sskicgah
 sskicgah
发布于 2017/08/16 10:14
字数 814
阅读 254
收藏 2
点赞 1
评论 0

简单的说,就是最近需要做图像处理相关的项目,之前没关注过这个领域,突然接触,还是很多细节思路不明白,中间想了很多临时方案,解决过程,最后探索的结果是用不上,不过也有部分东西可以留下思路作为借鉴。

图像提取轮廓,庆幸找到用 Python 和 OpenCV 检测图片上的条形码这篇文章,学了一些处理的思路和方法。这个也是整个处理过程的基础。这里简单说一个探索过程,就是提取轮廓,目标国徽。

opencv版本不一样,用到的api还是有区别的,这里用到的版本是2.4.13

截取一张国徽照片,参考上面的文章,先做灰度,模糊,二值化,再做闭运算,之后4次腐蚀,4次膨胀,之后查找轮廓,在原图画一个轮廓,看起来不是很理想。

def get_guohui2():
    #获取国徽轮廓
    img = cv2.imread("pic/guohui0.jpg")
    
    #灰度
    gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
    #模糊
    blurred = cv2.blur(gray, (9, 9))
    #二值化
    (_, thresh) = cv2.threshold(blurred, 127, 255, cv2.THRESH_BINARY)
    cv2.imshow("image", thresh)
    cv2.waitKey(0)
    
    #闭运算
    kernel = cv2.getStructuringElement(cv2.MORPH_RECT, (40, 20))
    close = cv2.morphologyEx(thresh, cv2.MORPH_CLOSE, kernel)

    # perform a series of erosions and dilations
    #腐蚀、膨胀
    close = cv2.erode(close, None, iterations = 4)
    close = cv2.dilate(close, None, iterations = 4)
    
    cv2.imshow("image", close)
    cv2.waitKey(0)
    
    #查找轮廓
    (contours, _) = cv2.findContours(close, cv2.RETR_TREE, cv2.CHAIN_APPROX_SIMPLE)
    
    cv2.drawContours(img, contours, -1, (0, 255, 0), 3)
    
    cv2.imshow("image", img)
    cv2.waitKey(0)

后面改了先开运算再闭运算,再调整一些参数,看起来效果好多了

def get_guohui2():
    #获取国徽轮廓
    img = cv2.imread("pic/guohui0.jpg")
    
    #灰度
    gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
    #模糊
    blurred = cv2.blur(gray, (3, 3))
    #二值化
    (_, thresh) = cv2.threshold(blurred, 127, 255, cv2.THRESH_BINARY)
    cv2.imshow("image", thresh)
    cv2.waitKey(0)
    
    #开运算
    kernel = cv2.getStructuringElement(cv2.MORPH_RECT, (25, 25))
    open = cv2.morphologyEx(thresh, cv2.MORPH_OPEN, kernel)

    # perform a series of erosions and dilations
    #腐蚀、膨胀
    open = cv2.erode(open, None, iterations = 4)
    open = cv2.dilate(open, None, iterations = 4)
    
    cv2.imshow("image", open)
    cv2.waitKey(0)
    
    #闭运算
    close = cv2.morphologyEx(open, cv2.MORPH_CLOSE, kernel)
    cv2.imshow("image", close)
    cv2.waitKey(0)
    
    #查找轮廓
    (contours, _) = cv2.findContours(close, cv2.RETR_TREE, cv2.CHAIN_APPROX_SIMPLE)
    
    cv2.drawContours(img, contours, -1, (0, 255, 0), 3)
    
    cv2.imshow("image", img)
    cv2.waitKey(0)

但是还有一些缺陷,不够完整,后面想到,可能是边缘不够明显,于是找了怎么锐化边缘,找到OpenCV图像处理 空间域图像增强(图像锐化 1 基于拉普拉斯算子)。里面都是C++的代码,参考了一下,用了矩阵,小改就完成了。锐化后没做模糊操作。

def get_guohui2():
    #获取国徽轮廓
    img = cv2.imread("pic/guohui0.jpg")
    
    #锐化操作
    kernel = np.matrix('0 -1 0; -1 5 -1; 0 -1 0')
    dst = cv2.filter2D(img,-1,kernel)

    cv2.imshow("Result", dst)
    cv2.waitKey(0)
    
    #灰度
    gray = cv2.cvtColor(dst, cv2.COLOR_BGR2GRAY)
    
    #二值化
    (_, thresh) = cv2.threshold(gray, 127, 255, cv2.THRESH_BINARY)
    cv2.imshow("image", thresh)
    cv2.waitKey(0)
    
    #开运算
    kernel = cv2.getStructuringElement(cv2.MORPH_RECT, (25, 25))
    open = cv2.morphologyEx(thresh, cv2.MORPH_OPEN, kernel)

    # perform a series of erosions and dilations
    #腐蚀、膨胀
    open = cv2.erode(open, None, iterations = 4)
    open = cv2.dilate(open, None, iterations = 4)
    
    cv2.imshow("image", open)
    cv2.waitKey(0)
    
    #闭运算
    close = cv2.morphologyEx(open, cv2.MORPH_CLOSE, kernel)
    cv2.imshow("image", close)
    cv2.waitKey(0)
    
    #查找轮廓
    (contours, _) = cv2.findContours(close, cv2.RETR_TREE, cv2.CHAIN_APPROX_SIMPLE)
    
    area = cv2.contourArea(contours[0])
    print area
    
    cv2.drawContours(img, [contours[1]], -1, (0, 255, 0), 3)
    
    cv2.imshow("image", img)
    cv2.waitKey(0)

完。

© 著作权归作者所有

共有 人打赏支持
sskicgah
粉丝 7
博文 43
码字总数 32720
作品 0
福州
程序员
OpenCV中几何形状识别与测量

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

gloomyfish
04/16
0
0
opencv中复制视频不成功,请大牛请教

大牛们,本人在opencv+python环境下,用下列代码创建新视频,文件创建成功,但是该视频文件没有任何内容写入,是什么原因啊 import cv2 videoCapture = cv2.VideoCapture('f://video.avi') ...

哈泥湖
2013/07/19
766
1
iOS中使用Tesseract提取身份证号码

iOS中使用Tesseract提取身份证号码 曾静的技术博客2017-07-1557 阅读 iOS ( ,光学字符识别)是指电子设备(例如扫描仪或数码相机)检查纸上打印的字符,通过检测暗、亮的模式确定其形状,然...

曾静的技术博客
2017/07/15
0
0
【OpenCV3图像处理】提取轮廓的凸包、外包矩形、最小外包矩形、最小外包圆

1、提取轮廓的凸包 convexhull()函数(点我看OpenCV3.2帮助文档) 函数调用形式: void convexhul(InputArray points,OutputArray hull,bool clockwise=false,bool returnPoints=true) 输入......

u011574296
2017/06/15
0
0
【工具语言系列】关于 MATLAB 图像分割 & 边缘检测

如何进行图像分割 图像分割 基于边缘的图像分割 微分算子 曲线拟合边缘检测 Canny边缘检测算子 轮廓跟踪 边缘形态检测 霍夫变换 多尺度轮廓提取 基于区域的图像分割 阈值化分割 特征空间聚类...

AllenMoore
01/27
4
0
opencv学习笔记(三十五)查找轮廓

现在终于可以讨论轮廓的问题了。首先我们需要了解轮廓到底是什么?一个轮廓一般对应一系列的点,也就是图像中的一条曲线。表示方法可能根据不同情况而有所不同。有多种方法可以表示曲线。在O...

u014751607
2017/03/11
0
0
图像分类综述

计算机视觉三个层次 计算机视觉三层次 1. 图像分类概述 1.1 图像分类是指根据一定的分类规则将图像自动分到一组预定义类别中的过程。 1.2 图像分类方法的划分十分多样。根据图像语义内容的不...

七八音
01/04
0
0
【OpenCV3.3】检测图像中的身份证区域

假设现有一些含身份证前景以及不确定背景的图像,想通过计算机将身份证区域检测出来,实现诸如用户拍照定位提示、背景分离等业务,用OpenCV该如何做呢?如果输入图像前景和背景同时具有一定区...

wjf1997
2017/08/16
0
0
国徽CMS标签问题?

正在加班做网站,突然遇到难题,国徽CMS标签无法移动,拖动,编辑,求解,感谢

考拉的梦想
2015/11/08
107
0
opencv链码坐标提取

各位大神,本人用opencv已经求得轮廓的链码?可是提取链码的坐标结果出来却是非常大,有问题。 哪位大神知道怎么正确提取freeman链码坐标啊,帮帮我,谢谢了,卡了好几天了. 或者用这种方法的...

小王子52078
2015/12/06
423
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

JS中的toFixed,toExponential,toPrecision

toFixed():根据小数点后的指定位数,将数字转换为字符串,它不用指数计数法。 toExponential():根据小数点后指定位数,将数字转化为指数形式字符串。小数点前面只有一位,小数点后面的...

AndyZhouX
8分钟前
0
0
istio 路由实例解析

根据链路追踪图如上: 资料:https://istio.io/docs/guides/bookinfo/ 流程解析: 1. 访问地址: http://IP:31380/productpage kubectl get svc --all-namespaces -o wide istio-system isti......

xiaomin0322
12分钟前
2
0
Centos7通过yum安装jdk8

先查看系统是否已有自带的jdk rpm -qa |grep java rpm -qa |grep jdk rpm -qa |grep gcj 如果没有输出信息,则说明系统没有安装。如果有输出信息,则执行下面的命令卸载 rpm -qa | grep jav...

iplusx
14分钟前
0
0
字体的动画

树不要皮必死无疑,人不要脸天下无敌。如果你此时正在被承受着不公平的待遇,不要伤心不要气馁,吃亏要趁早。 .menu ul li a { position:relative; color: #FFFFFF; text-decoration:...

Js_Mei
14分钟前
0
0
新手学习hadoop发行版本选择介绍

Hadoop对于从事互联网工作的朋友来说已经非常熟悉了,相信在我们身边有很多人正在转行从事hadoop开发的工作,理所当然也会有很多hadoop入门新手。Hadoop开发太过底层,技术难度远比我们想象的...

左手的倒影
15分钟前
0
0
iOS定时器循环引用问题解决

我们通常使用NSTimer或CADisplayLink会使用以下方式 //定义@property (nonatomic, strong)NSTimer *timer;//实现self.timer = [NSTimer scheduledTimerWithTimeInterval:1 target:p......

xiaobai1315
15分钟前
0
0
给wordpress程序提速

在上一节中,我们介绍了wordpress CMS主题提速,本节我们接着介绍wordpress主题提速:gravatar用户头像缓存和google字体去除。 gravatar头像受到全世界网络用户的喜爱,设置好gravatar头像后...

hero2019
18分钟前
0
0
DevExpress v18.1最新版帮助文档下载大全

DevExpress v18.1.4帮助文档下载列表大全来啦!包含.NET、VCL、HTML/JS系列所有帮助文档,提供CHM和PDF两个版本。除已停止更新的Silverlight、Windows 8外,其余均为最新版本。 文章底部扫描...

Miss_Hello_World
21分钟前
0
0
Unity Shader中各种空间及变换方法

前几天尝试写一个传送门的shader,发现自己对坐标之间的变换掌握的不够熟练,趁着这阵子想整理shader相关的知识点,先把各种空间及之间转换整理一下。 1 模型空间-世界空间-观察空间-裁剪空间...

爽歪歪ES
27分钟前
0
0

定义和应用 栈(stack)是一种特殊的线性表,其插入(也称入栈或压栈)和删除(也称出栈或弹栈)操作都在表的同一端进行。这一端被称为栈顶(top)另一端称为栈底端(bottom)。 我们生活中其实...

Frost729
28分钟前
0
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部