在此基础上加上NMS算法,

NMS是经常伴随图像区域检测的算法,作用是去除重复的区域
"""-*- coding: utf-8 -*-author: Hao Hu@date   2021/12/2 10:52 PM
"""
import cv2
img_path = 'sample1.jpg'
import numpy as npdef non_max_suppression_fast(boxes, overlapThresh):"""将矩形框中的矩形框去掉"""# 空数组检测if len(boxes) == 0:return []# 将类型转为floatif 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)  # 返回的是右下角坐标从小到大的索引值# 开始遍历删除重复的框while len(idxs) > 0:# 将最右下方的框放入pick数组last = len(idxs) - 1i = idxs[last]pick.append(i)# 找到剩下的其余框中最大的坐标x1y1,和最小的坐标x2y2,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]])# 计算重叠面积占对应框的比例w = np.maximum(0, xx2 - xx1 + 1)h = np.maximum(0, yy2 - yy1 + 1)overlap = (w * h) / area[idxs[:last]]# 如果占比大于阈值,则删除idxs = np.delete(idxs, np.concatenate(([last], np.where(overlap > overlapThresh)[0])))return boxes[pick].astype("int")def get_word_area(img_path):"""得到检测图像中的文本区域,画出轮廓"""mser = cv2.MSER_create()img = cv2.imread(img_path)gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)vis = img.copy()regions, _ = mser.detectRegions(gray)hulls = [cv2.convexHull(p.reshape(-1, 1, 2)) for p in regions]# 绘制目前的矩形文本框# mser = cv2.MSER_create()# cv2.polylines(vis, hulls, 1, (0, 255, 0))keep = []for c in hulls:x, y, w, h = cv2.boundingRect(c)keep.append([x, y, x + w, y + h])'''NMS是经常伴随图像区域检测的算法,作用是去除重复的区域,在人脸识别、物体检测等领域都经常使用,全称是非极大值抑制(non maximum suppression),就是抑制不是极大值的元素,所以用在这里就是抑制不是最大框的框,也就是去除大框中包含的小框'''# 使用NMS算法# keep2 = np.array(keep)# pick = non_max_suppression_fast(keep2, 0.5)# for (startX, startY, endX, endY) in pick:#     cv2.rectangle(vis, (startX, startY), (endX, endY), (255, 185, 120), 2)# 直接使用holyholes算法cv2.polylines(vis, hulls, 1, (0, 255, 0))cv2.imshow("before use NMS", vis)if cv2.waitKey(0) == 9:cv2.destroyAllWindows()if __name__ == '__main__':img_path = 'sample1.jpg'get_word_area(img_path)

使用holyholes实现边缘检测相关推荐

  1. OpenCV 笔记(03)— 读取视频、通过摄像头采集视频、采集视频 canny 边缘检测

    我们本节学习如何利用 OpenCV 中的 VideoCapture 类,来对视频进行读取显示,以及调用摄像头. VideoCapture 它提供了从摄像机或视频文件捕获视频的 C++ 接口, 作用是从 ...

  2. OpenCV 笔记(02)— 图像显示、保存、腐蚀、模糊、canny 边缘检测(imread、imshow、namedWindow、imwrite)

    OpenCV 提供两种用户界面选项: 基于原生用户界面的基本界面,适用于 Mac OS X 的 cocoa 或 carbon,以及适用于 Linux 或 Windows 用户界面的 GTK ,这些界面 ...

  3. Android OpenCV 边缘检测 Canny 的使用

    先看下实现的效果图 下面看下代码使用 Canny(Mat image, Mat edges, double threshold1, double threshold2, int apertureSiz ...

  4. 《OpenCV3编程入门》学习笔记7 图像变换(一)基于OpenCV的边缘检测

    第7章 图像变换 7.1 基于OpenCV的边缘检测 7.1.1 边缘检测的一般步骤 1.滤波:边缘检测算法主要基于图像强度的一阶和二阶导数,导数对噪声敏感,所以要滤波 2.增强:确定图像各点邻域强度 ...

  5. OpenCV+python:Canny边缘检测算法

    1,边缘处理 图像边缘信息主要集中在高频段,通常说图像锐化或检测边缘,实质就是高频滤波.我们知道微分运算是求信号的变化率,具有加强高频分量的作用. 在空域运算中来说,对图像的锐化就是计算微分.由于数字 ...

  6. python+opencv Canny边缘检测

    Step1:高斯滤波(低通滤波,用高斯滤波器平滑图像) 卷积/卷积核(对应相乘再相加) 原始图片外围加一圈0,为保证新图片与原始图片大小相同 卷积核为3*3,外围补一圈0:卷积核为5*5,外围补两圈0 ...

  7. Python,Opencv cv2.Canny()边缘检测

    Python,Opencv的Canny边缘检测 1. 效果图 2. 源码 参考 这篇博客将介绍Canny边缘检测的概念,并利用cv2.Canny()实现边缘检测: Canny边缘检测是一种流行的边缘检 ...

  8. 数字图像处理:边缘检测(Edge detection)

    转载自:https://zhuanlan.zhihu.com/p/59640437 觉得写得通俗易懂,要是每个人的博客都这么人性化.... 写在前面: 本文篇幅较长,用了大量图与公式帮助大家深入理解各 ...

  9. CS131专题-3:图像梯度、边缘检测(sobel、canny等)

    目录 1 前言 2 图像梯度 2.1 梯度公式的离散形式 2.2 图像的梯度表示 2.3 图像梯度的最简单计算方法 2.4 直接应用梯度找图像边缘的问题以及解决方案 3 边缘检测 3.1 好的边缘检测 ...

最新文章

  1. C标准库和glibc(C运行库)的关系
  2. Matlab:图像数据保存
  3. 【SSL】使用Keytool工具生成证书及签名完整步骤
  4. 自定义Android带图片的按钮
  5. asp.net mvc使用TagBuilder的应用程序集
  6. win10推送_Win10推送更新升级Edge浏览器:用户发现电脑速度因此变慢
  7. java取得泛型,Java取得泛型类型
  8. java.sql.Date – Java SQL日期
  9. thymeleaf学习笔记
  10. python中的匿名函数_Python匿名函数详解
  11. IT行业,应届生找工作遇到“招转培”怎么办?
  12. 深度学习 —— 深度置信网络
  13. STEAM无法打开创意工坊或成就页面
  14. 状态良好(恢复分区)空间的删除的方法
  15. 最全离散数学 集合运算基本法则(包括差集公式)
  16. 硬件设备的软件测试,智能设备的软硬件测试都要测什么?
  17. 12.1 hashlib--安全的哈希计算和签名库
  18. 如何实现一个简单的过滤器
  19. 车牌识别关键技术-车牌定位
  20. 美团·北极星开发对接避坑指北(Java)

热门文章

  1. 适合写作业时听的歌(高效学习)
  2. org.hibernate.HibernateException: No CurrentSessionContext configured! at org.hibernate.internal.Se
  3. 为什么导师总说,科研搞好了,工作随便找?
  4. transferto()方法,是springmvc封装的方法,用于图片上传时,把内存中图片写入磁盘
  5. matlab filter rayleighchan,关于Matlab中rayleighchan这个函数的使用
  6. 使用Python+yolov3实现对帧数不等长视频进行批处理
  7. ubuntu16.04 catkin_make报错No rule to make target '/usr/lib/x86_64-linux-gnu/libGL.so'
  8. 情感计算——人脸表情识别CNN实现
  9. Docker搭建Nextcloud私有网盘
  10. 2022HDC见闻与新技术学习体验分享