文章目录

  • mser检测
  • nms非极大值抑制
  • 代码

mser检测

nms非极大值抑制

代码

import cv2
import matplotlib.pyplot as plt
import numpy as np# NMS 方法(Non Maximum Suppression,非极大值抑制)
def nms(boxes, overlapThresh):if len(boxes) == 0:return []if boxes.dtype.kind == "i":boxes = boxes.astype("float")pick = []# 取四个坐标数组x1 = boxes[:, 0]y1 = boxes[:, 1]x2 = boxes[:, 2]y2 = boxes[:, 3]# 计算面积数组area = (x2 - x1 + 1) * (y2 - y1 + 1)  # 计算各个坐标框的面积# 按得分排序(如没有置信度得分,可按坐标从小到大排序,如右下角坐标)idxs = np.argsort(y2)  # np.argsort() ,返回元素原来的索引值。可通过索引值输出排序后的数组# x= np.array([3, 1, 2])# a = np.argsort(x,axis=0) # axis=0为列排序, axis=-1为最大维度方向排序。# print(a) 为[1, 2, 0]# print(x[a]) 为[1, 2, 3] 通过索引输出排序后的数组# 开始遍历,并删除重复的框while len(idxs) > 0:# 将最右下方的框放入pick数组last = len(idxs) - 1i = idxs[last]  # i表示右下角最大的框pick.append(i)# 找剩下的其余框中最大坐标和最小坐标xx1 = np.maximum(x1[i], x1[idxs[:last]])yy1 = np.maximum(y1[i], y1[idxs[:last]])xx2 = np.minimum(x2[i], x2[idxs[:last]])yy2 = np.minimum(y2[i], y2[idxs[:last]])# 计算重叠面积占对应框的比例,即 IoUw = np.maximum(0, xx2 - xx1 + 1)h = np.maximum(0, yy2 - yy1 + 1)overlap = (w * h) / area[idxs[:last]]# 如果 IoU 大于指定阈值,则删除# np.where(condation), 若满足条件,返回索引值;np.where()[0],返回行的索引值;np.where()[1]返回列的索引# np.where(condation, x, y),满足条件返回x, 不满足返回y.# np.concatenate((a1, a2,...), axis=0/1):数组拼接,a1,a2为数组, axis=0为行拼接(默认),axis=1为列拼接idxs = np.delete(idxs, np.concatenate(([last], np.where(overlap > overlapThresh)[0])))return boxes[pick].astype("int")if __name__ == '__main__':src = cv2.imread(r'F:\OPENCV\Opencv\digit.png')img = src.copy()img2 = img.copy()gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)# mser算法mser = cv2.MSER_create(_min_area=10)regions, boxes = mser.detectRegions(gray)keep = []for box in boxes:x, y, w, h = boxkeep.append([x, y, x + w, y + h])cv2.rectangle(img, (x, y), (x + w, y + h), (0, 0, 255), 2)keep2 = np.array(keep)pick = nms(keep2, 0.3)for (startX, startY, endX, endY) in pick:cv2.rectangle(img2, (startX, startY), (endX, endY), (0, 0, 255), 2)titles = ['src', 'img1', 'img2']images = [src, img, img2]plt.figure(figsize=(3, 1))for i in range(len(images)):plt.subplot(1, 3, i + 1)plt.imshow(images[i][:, :, ::-1], 'gray')plt.title(titles[i])plt.xticks([])plt.yticks([])plt.savefig(r'F:\OPENCV\Opencv\mser.jpg', dpi=500)plt.show()

结果显示

Opencv学习笔记(二十六)文本检测mser+非极大值抑制nms相关推荐

  1. OpenCV学习笔记(十六)——CamShift研究 OpenCV学习笔记(十七)——运动分析和物体跟踪Video OpenCV学习笔记(十八)——图像的各种变换(cvtColor*+)imgproc

    OpenCV学习笔记(十六)--CamShift研究 CamShitf算法,即Continuously Apative Mean-Shift算法,基本思想就是对视频图像的多帧进行MeanShift运算 ...

  2. OpenCV学习笔记(十六):直方图均衡化:equalizeHist()

    OpenCV学习笔记(十六):直方图均匀化:equalizeHist() 参考博客: 直方图均衡化的数学原理 直方图匹配的数学原理 直方图均衡化广泛应用于图像增强中: 直方图均衡化处理的"中 ...

  3. JVM 学习笔记二十六、JVM监控及诊断工具-GUI篇

    二十六.JVM监控及诊断工具-GUI篇 1.工具概述 使用上一张命令行工具或组合能帮您获取目标Java应用性能相关的基础信息,但他们存在下列局限: (1)无法获取方法级别的分析数据,如方法间的调用关系 ...

  4. opencv学习笔记二十九:SIFT特征点检测与匹配

    SIFT(Scale-invariant feature transform)是一种检测局部特征的算法,该算法通过求一幅图中的特征点(interest points,or corner points) ...

  5. opencv学习笔记三十六:AKAZE特征点检测与匹配

    KAZE是日语音译过来的 , KAZE与SIFT.SURF最大的区别在于构造尺度空间,KAZE是利用非线性方式构造,得到的关键点也就更准确(尺度不变性 ): Hessian矩阵特征点检测 ,方向指定, ...

  6. Jenkins 持续集成 概念(学习笔记二十六)

    持续集成:提交.测试.构建.测试.部署 前不久接触了持续集成(Continuous Integration,CI). 一.持续集成是什么 首先说说"集成"的概念.在实际的软件开发中 ...

  7. 立创eda学习笔记二十六:手把手教你使用立创eda的官方教程

    可以通过以下办法找到教程: 1,在软件界面点帮助-使用教程 2,在网站首页-帮助-教程进入 如何使用教程: 这里是一级目录,其实对新手最有用的是前面3个部分,后面的仿真先不看. 常见问题里面不光是讲的 ...

  8. [傅里叶变换及其应用学习笔记] 二十六. 高维傅里叶变换的推导

    高维意味着函数中有多个变量,典型的高维傅里叶应用为图像处理. 一个二维图像的亮度(灰度)可以用$f(x_1,x_2)$来表示,以lena为例,图像平面作为$x_1,x_2$平面,灰度作为$z$轴,形成 ...

  9. Java学习笔记二十六:Java多态中的引用类型转换

    Java多态中的引用类型转换 引用类型转换: 1.向上类型转换(隐式/自动类型转换),是小类型到大类型的转换: 2.向下类型转换(强制类型转换),是大类型到小类型的转换: 3.instanceof运算 ...

最新文章

  1. ROS Indigo下安装测试Xtion Pro
  2. 使用Tensorflow构建和训练自己的CNN来做简单的验证码识别
  3. Python pickle模块和joblib模块浅析
  4. JZOJ 5662. 【GDOI2018Day1模拟4.17】尺树寸泓
  5. [转]C++中extern C的含义
  6. 黄聪:wordpress如何开启文章格式post format
  7. 统计单词出现的次数并进行排
  8. python 爬取贝壳网小区名称_如何使用 python 爬取全国小区名称
  9. php apd,PHP debug 工具 之 APD
  10. iPhone企业应用实例分析之二:程序处理流程
  11. 腾讯x5内核使用方法 手动安装 全网最简单
  12. 彭聃龄普通心理学第5版笔记和课后习题答案
  13. 硬件笔记1:80508550三极管对管驱动电机电路(已经实测可用)
  14. VS2017编译Detours1.5
  15. 帝国cms二次开发留言板自定义字段教程
  16. 关于echarts中饼图设置颜色的方法
  17. 【使用python和flask建个人博客】如何在jinja2中进行简单的四则运算和把一个浮点数显示成整数?
  18. 「实战篇」开源项目docker化运维部署-前端java部署(八)
  19. 计算机控制点火系统检修,《发动机电控技术》教学教案:计算机控制点火系统的组成及工作原理...
  20. sed是linux命令吗,Linux12_ sed命令详解

热门文章

  1. 1.4 Go开发工具
  2. JSF seam 中使用UEditor
  3. java hadhoop如门pdf_《Hadoop实战》PDF 下载
  4. 高中计算机教师专业,高中计算机教师资格证,要计算机专业证书吗
  5. BAT文件语法和技巧(bat文件的编写及使用)
  6. (转)马邑之战与项目管理
  7. 机械中计算机的应用研究,机械设计制造自动化中计算机技术的应用
  8. EXCEL中条件格式中如果为真则停止的设置
  9. vc中实现xp风格界面
  10. MyBatis简单的增删改查