MSER — 自然场景文本检测

article/2025/9/13 6:18:35

MSER是最大稳定极值区域:是对一幅灰度图像(灰度值为0~255)取阈值进行二值化处理,阈值从0到255依次递增。阈值的递增类似于分水岭算法中的水面的上升,随着水面的上升,有一些较矮的丘陵会被淹没,如果从天空往下看,则大地分为陆地和水域两个部分,这类似于二值图像。在得到的所有二值图像中,图像中的某些连通区域变化很小,甚至没有变化,则该区域就被称为最大稳定极值区域。具体算法的原理参考http://blog.csdn.net/zhaocj/article/details/40742191
此刻正在听张学友的歌,所以想到先做一个测试吧:

2017世界巡回演唱会西安站.jpeg

MSER多用于自然场景的文本检测的前期阶段,产生尽可能多的proposals,首先回顾一下在调用这个函数过程中踩过的坑:
1、不知道如何修改MSER中的参数,如灰度值的变化量,检测到的组块面积的范围以及最大的变化率,只能使用默认参数如下:

 

mser = cv2.MSER_create()

最后发现了http://bytedeco.org/javacpp-presets/opencv/apidocs/org/bytedeco/javacpp/opencv_features2d.MSER.html#create-int-int-int-double-double-int-double-double-int-,发现可以酱紫根据自己的图像修改参数:

mser = cv2.MSER_create(_delta=2, _min_area=200, _max_variation=0.7)

mser参数.jpeg

2、下图是调用mser后用polylines绘制轮廓的结果:

cv2.polylines(imgContours, hulls, 1, (255, 0, 0))

mser检测结果.jpeg

那如果想要得到外接矩形怎么办?求助万能的百度,给出的解决方案如下:http://www.cnblogs.com/jkmiao/p/6797252.html

mser = cv2.MSER_create()
regions, boxes = mser.detectRegions(gray)
for box in boxes:x, y, w, h = boxcv2.rectangle(img, (x, y), (x + w, y + h), (255, 0, 0), 2)
cv2.imshow("img2", vis)

然而并不能解决问题,在调用mser.detectRegions返回两个函数的时候会报,http://answers.opencv.org/question/139636/want-to-get-area-from-mser-operator/这个帖子也出现了类似的错误:

contours, boxes = mser.detectRegions(imgThreshCopy)
Error:
TypeError: Required argument 'bboxes' (pos 2) not found

受到findcontours绘制外界矩形的启发,因此我尝试了第二种解决方案:

for c in hulls:x, y, w, h = cv2.boundingRect(c)cv2.rectangle(vis, (x, y), (x + w, y + h), (255, 0, 0), 1)

至此完美的解决问题,下面是得到的结果图:

矩形框绘制结果.jpeg

3、但是从图中可以看到很多重叠框,可以在这里加上NMS, 筛选一部分矩形框,推荐这两篇博客,写的很详细,给出了demo,地址:1、http://www.pyimagesearch.com/2014/11/17/non-maximum-suppression-object-detection-python/,2、http://blog.csdn.net/pandav5/article/details/50997272。 因为在NMS过程中用的数据类型是numpy.ndarry, 所以执着的我在http://www.jianshu.com/p/f8e6a0a6399f中对于list和numpy.ndarry的区别扒了一下:
最后贴上完整的代码和运行结果:

 

#coding:utf-8
import numpy as np
import cv2
import nms
img = cv2.imread('3447976_0.jpg')
gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
vis = img.copy()
orig = img.copy()
mser = cv2.MSER_create()
regions = mser.detectRegions(gray, None)
hulls = [cv2.convexHull(p.reshape(-1, 1, 2)) for p in regions]
cv2.polylines(img, hulls, 1, (0, 255, 0))
cv2.imshow('img', img)
keep = []
for c in hulls:x, y, w, h = cv2.boundingRect(c)keep.append([x, y, x + w, y + h])cv2.rectangle(vis, (x, y), (x + w, y + h), (255, 255, 0), 1)            
print "[x] %d initial bounding boxes" % (len(keep))
cv2.imshow("hulls", vis)
keep2=np.array(keep)
pick = nms.nms(keep2, 0.5)
print "[x] after applying non-maximum, %d bounding boxes" % (len(pick))
# loop over the picked bounding boxes and draw them
for (startX, startY, endX, endY) in pick:cv2.rectangle(orig, (startX, startY), (endX, endY), (255, 0, 0), 1)
cv2.imshow("After NMS", orig)
cv2.waitKey(0)
cv2.destroyAllWindows()

 

 

运行结果:

WechatIMG21.jpeg

[x] 1795 initial bounding boxes
[x] after applying non-maximum, 130 bounding boxes

可以看到应用NMS之前检测到的矩形框是1795个,应用NMS后矩形框的数量减少到了130个,这张图只是拿来做测试用,并没有调整自己的参数,用了默认值。效果还不错吧!



作者:我是笨徒弟
链接:https://www.jianshu.com/p/1b9c275698c9
 


http://chatgpt.dhexx.cn/article/nYZJm1Fc.shtml

相关文章

文字检测与识别1-MSER

导语 文字识别在现实场景中的用途非常广泛,现在已经有很多公司将这项技术用于实际中。比如车牌识别,图片转换成文档,拍照搜题,拍照翻译等。这让很多人有了错觉,感觉文字识别的技术已经炉火纯青,可以广泛应…

MSER常见参数

MSER用于文本检测已经成熟了,现简单使用来识别车牌号。 目录 MSER参数最大最小区域固定 MSER参数 默认:int delta 5, int min_area 60, int max_area 14400, double max_variation 0.25, double min_diversity .2 * Full constructor for %MSER d…

MSER算法

最稳定极值区域介绍 如把灰度图看成高低起伏的地形图,其中灰度值看成海平面高度的话,MSER的作用就是在灰度图中找到符合条件的坑洼。条件为坑的最小高度,坑的大小,坑的倾斜程度,坑中如果已有小坑时大坑与小坑的变化率…

【MSER】基于MSER算法的交通标志分割仿真

1.软件版本 MATLAB2021a 2.本算法理论知识 [1]钱坤. 基于MSER和遗传优化SVM的交通标志识别的研究[D]. 大连理工大学. [2]王斌, 常发亮, 刘春生. 基于MSER和SVM的快速交通标志检测[J]. 光电子.激光, 2016. 3.部分源码 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%…

MSER相关总结

最近做项目用到了MSER,特地在这做总结。 以前提到字符检测首先会想到Tesseract,但是tesseact对图像的二值化要求过高,比较适合于白底黑字的字符识别,对于复杂情况就无能为力了; 于是就想到用轮廓检测,这种…

最大稳定极值区域(MSER)检测

Lowe和Bay提出的SIFT和SURF算法高效实现了具有尺度和旋转不变性的特征检测,但这些特征不具有仿射不变性。 区域检测针对各种不同形状的图像区域,通过对区域的旋转和尺寸归一化,可以实现仿射不变性。 MSER(Maximally Stable Extr…

MSER最稳定极值区域源码分析

最稳定极值区域介绍 如把灰度图看成高低起伏的地形图,其中灰度值看成海平面高度的话,MSER的作用就是在灰度图中找到符合条件的坑洼。条件为坑的最小高度,坑的大小,坑的倾斜程度,坑中如果已有小坑时大坑与小坑的变化率。…

OpenCVSharp入门教程 特征提取①——MSER区域特征提取Maximally Stable Extremal Regions

文章目录 一、前文二、特征提取流程三、界面布局四、功能实现4.1 打开图片4.2 特征提取—源码4.3 特征提取—参数讲解4.4 特征提取—Detect和DetectRegions 五、运行效果图六、发现并解决问题七、其他问题 一、前文 MSER Maximally Stable Extremal Regions 最大极值稳定区 业…

【OpenCV 例程 300篇】247. 特征检测之最大稳定极值区域(MSER)

『youcans 的 OpenCV 例程300篇 - 总目录』 【youcans 的 OpenCV 例程 300篇】247. 特征检测之最大稳定极值区域(MSER) 1. 最大稳定极值区域(MSER) 最大稳定极值区域(MSER-Maximally Stable Extremal Regions&#xf…

师傅带徒弟学JavaScript-关东升-专题视频课程

师傅带徒弟学JavaScript—430人已学习 课程介绍 本课程是学习Web前端的基础课程,是学习Web前端框架、JavaWeb开发、Python Web开发、PHP开发和.NET Web开发前置课程。 课程收益 掌握JavaScript 讲师介绍 关东升 更多讲师课程 一个在IT领域摸爬滚打20多年的老程…

师傅带徒弟学:Python Web之Flask框架-关东升-专题视频课程

师傅带徒弟学:Python Web之Flask框架—317人已学习 课程介绍 Python Web是Python语言一个重要的应用方面,Python Web有很多,其中Flask和Django框架是他们的佼佼者。 Flask是一个Python实现的Web开发微框架。 课程收益 掌握Flask框架 讲师…

关东升的iOS实战系列图书 《iOS实战:入门与提高卷(Swift版)》已经上市

 承蒙广大读者的厚爱我的 《iOS实战:入门与提高卷(Swift版)》京东上市了,欢迎广大读者提出宝贵意见。http://item.jd.com/11766718.html 欢迎关注关东升新浪微博tony_关东升。 关注智捷课堂微信公共平台&…

Sharding-JDBC(一)SpringBoot集成

目录 1.背景2.简介3.依赖与配置4.表结构(1..3)5.测试验证5.1 批量保存5.2 列表查询 6.源码地址 1.背景 随着业务数据量的增加,原来所有的数据都是在一个数据库上,网络IO及文件IO都集中在一个数据库上,因此CPU、内存、…

第一篇【Python】基础-关东升-专题视频课程

第一篇【Python】基础—833人已学习 课程介绍 本书是智捷课堂开发的立体化图书中的一本,所谓“立体化图书”就是图书包含:书籍、视频、课件和服务等内容。 其中第一篇包括8章内容,系统介绍了Python语言的基础知识。内容包括Python语言历史…

shardingsphere-jdbc 整合 springboot

shardingsphere官网地址 https://shardingsphere.apache.org/document/5.2.0/cn/user-manual/shardingsphere-jdbc/spring-boot-starter/rules/sharding/ 当前我们演示的是水平分表 1、基础环境配置以及依赖管理 1.1 创建数据库表结构 CREATE TABLE address_0 (id bigint(…

如果张东升是个程序员

张东升是一家互联网公司的程序员,一直以来都勤勤恳恳老实工作。 可最近一段时间,行业不景气,老板不但下令开启了996的工作模式,更要命的是频频更改需求,弄得大家是敢怒不敢言。 时间一久,很多员工开始消极…

专访关东升:松耦合分层架构设计

关东升,国内知名iOS技术作家,iOS技术顾问,高级培训讲师,移动开发专家。拥有16年软件开发经验、8年培训行业经验。精通iOS、Android和 Windows Phone 7及Html5等移动开发技术。在App Store发布多款游戏和应用软件,擅长移动平台的应用和游戏类项目开发。目前主要从事iOS应用…

Java从小白到大牛第3篇 【进阶篇】-关东升-专题视频课程

Java从小白到大牛第3篇 【进阶篇】—4371人已学习 课程介绍 本视频是智捷课堂推出的一套“Java语言学习立体教程”的视频第三部分,读者以及观看群是初级小白,通过本视频的学习能够成为Java大牛。本主要内容包括:异常处理、集合、泛型、文…

Python项目实战:数据可视化与股票数据分析-关东升-专题视频课程

Python项目实战:数据可视化与股票数据分析—333人已学习 课程介绍 本视频内容包括使用Matplotlib绘制图表、MySQL数据库、Python访问数据库和Lambda表达式。 目录: 23.1 使用Matplotlib绘制图表 23.1.1 安装Matplotlib 23.1.2 图表基本构成要素 23.1…

【ShardingSphere技术专题】「ShardingJDBC实战阶段」SpringBoot之整合ShardingJDBC实现分库分表(JavaConfig方式)

前提介绍 ShardingSphere介绍 ShardingSphere是一套开源的分布式数据库中间件解决方案组成的生态圈,它由Sharding-JDBC、Sharding-Proxy和Sharding-Sidecar(计划中)这3款相互独立的产品组成。 他们均提供标准化的数据分片、分布式事务和数据…