使用holyholes实现边缘检测
在此基础上加上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实现边缘检测相关推荐
- OpenCV 笔记(03)— 读取视频、通过摄像头采集视频、采集视频 canny 边缘检测
我们本节学习如何利用 OpenCV 中的 VideoCapture 类,来对视频进行读取显示,以及调用摄像头. VideoCapture 它提供了从摄像机或视频文件捕获视频的 C++ 接口, 作用是从 ...
- OpenCV 笔记(02)— 图像显示、保存、腐蚀、模糊、canny 边缘检测(imread、imshow、namedWindow、imwrite)
OpenCV 提供两种用户界面选项: 基于原生用户界面的基本界面,适用于 Mac OS X 的 cocoa 或 carbon,以及适用于 Linux 或 Windows 用户界面的 GTK ,这些界面 ...
- Android OpenCV 边缘检测 Canny 的使用
先看下实现的效果图 下面看下代码使用 Canny(Mat image, Mat edges, double threshold1, double threshold2, int apertureSiz ...
- 《OpenCV3编程入门》学习笔记7 图像变换(一)基于OpenCV的边缘检测
第7章 图像变换 7.1 基于OpenCV的边缘检测 7.1.1 边缘检测的一般步骤 1.滤波:边缘检测算法主要基于图像强度的一阶和二阶导数,导数对噪声敏感,所以要滤波 2.增强:确定图像各点邻域强度 ...
- OpenCV+python:Canny边缘检测算法
1,边缘处理 图像边缘信息主要集中在高频段,通常说图像锐化或检测边缘,实质就是高频滤波.我们知道微分运算是求信号的变化率,具有加强高频分量的作用. 在空域运算中来说,对图像的锐化就是计算微分.由于数字 ...
- python+opencv Canny边缘检测
Step1:高斯滤波(低通滤波,用高斯滤波器平滑图像) 卷积/卷积核(对应相乘再相加) 原始图片外围加一圈0,为保证新图片与原始图片大小相同 卷积核为3*3,外围补一圈0:卷积核为5*5,外围补两圈0 ...
- Python,Opencv cv2.Canny()边缘检测
Python,Opencv的Canny边缘检测 1. 效果图 2. 源码 参考 这篇博客将介绍Canny边缘检测的概念,并利用cv2.Canny()实现边缘检测: Canny边缘检测是一种流行的边缘检 ...
- 数字图像处理:边缘检测(Edge detection)
转载自:https://zhuanlan.zhihu.com/p/59640437 觉得写得通俗易懂,要是每个人的博客都这么人性化.... 写在前面: 本文篇幅较长,用了大量图与公式帮助大家深入理解各 ...
- CS131专题-3:图像梯度、边缘检测(sobel、canny等)
目录 1 前言 2 图像梯度 2.1 梯度公式的离散形式 2.2 图像的梯度表示 2.3 图像梯度的最简单计算方法 2.4 直接应用梯度找图像边缘的问题以及解决方案 3 边缘检测 3.1 好的边缘检测 ...
最新文章
- C标准库和glibc(C运行库)的关系
- Matlab:图像数据保存
- 【SSL】使用Keytool工具生成证书及签名完整步骤
- 自定义Android带图片的按钮
- asp.net mvc使用TagBuilder的应用程序集
- win10推送_Win10推送更新升级Edge浏览器:用户发现电脑速度因此变慢
- java取得泛型,Java取得泛型类型
- java.sql.Date – Java SQL日期
- thymeleaf学习笔记
- python中的匿名函数_Python匿名函数详解
- IT行业,应届生找工作遇到“招转培”怎么办?
- 深度学习 —— 深度置信网络
- STEAM无法打开创意工坊或成就页面
- 状态良好(恢复分区)空间的删除的方法
- 最全离散数学 集合运算基本法则(包括差集公式)
- 硬件设备的软件测试,智能设备的软硬件测试都要测什么?
- 12.1 hashlib--安全的哈希计算和签名库
- 如何实现一个简单的过滤器
- 车牌识别关键技术-车牌定位
- 美团·北极星开发对接避坑指北(Java)
热门文章
- 适合写作业时听的歌(高效学习)
- org.hibernate.HibernateException: No CurrentSessionContext configured! 	at org.hibernate.internal.Se
- 为什么导师总说,科研搞好了,工作随便找?
- transferto()方法,是springmvc封装的方法,用于图片上传时,把内存中图片写入磁盘
- matlab filter rayleighchan,关于Matlab中rayleighchan这个函数的使用
- 使用Python+yolov3实现对帧数不等长视频进行批处理
- ubuntu16.04 catkin_make报错No rule to make target '/usr/lib/x86_64-linux-gnu/libGL.so'
- 情感计算——人脸表情识别CNN实现
- Docker搭建Nextcloud私有网盘
- 2022HDC见闻与新技术学习体验分享