openCV【实践系列】5——使用OpenCV进行Delaunay三角剖分
- 什么是Delaunay三角剖分?
- 什么是Voronoi图?
- OpenCV中的Delaunay三角剖分和Voronoi图
points = []
# 添加每一组
points.append((x, y))
2. 使用矩形(rect)定义要分区的空间。如果在上一步中定义的点是在图像上定义的,则此矩形可以是(0,0,width,height)。否则,您可以选择一个包含点的矩形。
img = cv2.imread("image.jpg");
size = img.shape
rect = (0, 0, size[1], size[0])
3.使用上一步中获得的矩形创建Subdiv2D的实例
subdiv = cv2.Subdiv2D(rect);
- Delaunay三角剖分和Voronoi图的OpenCV示例
import cv2
import numpy as np
import random
# 检查一个点是否在矩形内
def rect_contains(rect, point) :if point[0] < rect[0] :return Falseelif point[1] < rect[1] :return Falseelif point[0] > rect[2] :return Falseelif point[1] > rect[3] :return Falsereturn True
# 绘制一个点
def draw_point(img, p, color ) :cv2.circle( img, p, 2, color, cv2.cv.CV_FILLED, cv2.CV_AA, 0 )
# 绘制 delaunay 三角剖分
def draw_delaunay(img, subdiv, delaunay_color ) :triangleList = subdiv.getTriangleList();size = img.shaper = (0, 0, size[1], size[0])for t in triangleList :pt1 = (t[0], t[1])pt2 = (t[2], t[3])pt3 = (t[4], t[5])if rect_contains(r, pt1) and rect_contains(r, pt2) and rect_contains(r, pt3) :cv2.line(img, pt1, pt2, delaunay_color, 1, cv2.CV_AA, 0)cv2.line(img, pt2, pt3, delaunay_color, 1, cv2.CV_AA, 0)cv2.line(img, pt3, pt1, delaunay_color, 1, cv2.CV_AA, 0)
# 绘制 voronoi 图
def draw_voronoi(img, subdiv) :( facets, centers) = subdiv.getVoronoiFacetList([])for i in xrange(0,len(facets)) :ifacet_arr = []for f in facets :ifacet_arr.append(f)ifacet = np.array(ifacet_arr, np.int)color = (random.randint(0, 255), random.randint(0, 255), random.randint(0, 255))cv2.fillConvexPoly(img, ifacet, color, cv2.CV_AA, 0);ifacets = np.array([ifacet])cv2.polylines(img, ifacets, True, (0, 0, 0), 1, cv2.CV_AA, 0)cv2.circle(img, (centers[0], centers[1]), 3, (0, 0, 0), cv2.cv.CV_FILLED, cv2.CV_AA, 0)
if __name__ == '__main__':win_delaunay = "Delaunay Triangulation"win_voronoi = "Voronoi Diagram"# 当绘制三角形剖分时打开动画画板animate = True# 定义绘制颜色delaunay_color = (255,255,255)points_color = (0, 0, 255)img = cv2.imread("image.jpg");img_orig = img.copy();# 创建用于Subdiv2D 的矩形size = img.shaperect = (0, 0, size[1], size[0])# 创建Subdiv2D 实例subdiv = cv2.Subdiv2D(rect);points = [];# 从 text 文件中读取点with open("points.txt") as file :for line in file :x, y = line.split()points.append((int(x), int(y)))# 将点依次插入subdiv中for p in points :subdiv.insert(p)# 展示动画画板if animate :img_copy = img_orig.copy()draw_delaunay( img_copy, subdiv, (255, 255, 255) );cv2.imshow(win_delaunay, img_copy)cv2.waitKey(100)# 绘制delaunay 三角剖分draw_delaunay( img, subdiv, (255, 255, 255) );for p in points :draw_point(img, p, (0,0,255))# 为Voronoi 图分配空间img_voronoi = np.zeros(img.shape, dtype = img.dtype)# 绘制 Voronoi 图draw_voronoi(img_voronoi,subdiv)cv2.imshow(win_delaunay,img)cv2.imshow(win_voronoi,img_voronoi)cv2.waitKey(0)
得到的结果就是和图1的中间图和右图一样,如果想要看Dlaunay三角剖分的动态过程可以访问这里,或者自己运行上述的代码
openCV【实践系列】5——使用OpenCV进行Delaunay三角剖分
https://bbs.easyaiforum.cn/thread-704-1-1.html
(出处: 易学智能)
openCV【实践系列】5——使用OpenCV进行Delaunay三角剖分相关推荐
- 机器学习实践系列之11 - OpenCV实战车道线检测
ADAS 在经过资本的一轮热炒之后已经不新鲜了,Mobile Eye的技术积累和效果也让很多童鞋叹为观止,然后奋起直指! 初学者为代表的童鞋,二话不说,上来就是霍夫变换,还是直接用opencv里带的, ...
- 机器学习实践系列之13 - OpenCV之图像去雾
图像去雾 是图像质量保证的一个重要方面,这里要讲到的是这个领域的一个里程碑式的贡献: 来自 何凯铭 的基于 暗原色先验(dark channel prior)的单一输入图像去雾方法,这是一种简单但是有 ...
- openCV【实践系列】6——使用OpenCV进行面部交换(换脸)
在本教程中,我们将学习如何使用C ++和Python中的OpenCV和DLib将一个图像上的面部换成另一个完全不同的面部. 为什么Face-Swap很难? 主要存在一下的四个方面的问题: 首先,不同的 ...
- opencv ocr字符识别_OCR深度实践系列:图像预处理
近一个半月时间没更了,在这段时间里针对OCR业务进行了深入研究,业务也已上线,谨以此篇作为OCR系列的开篇. 目前NLP+OCR的落地应用在市场上愈加火热,如金融领域的研报分析.司法领域的合同审核甚至 ...
- opencv生成3d模型_OCR深度实践系列:数据生成
OCR深度实践系列:(一)图像预处理这篇为OCR深度实践系列的第二篇:数据生成.深度学习依赖大量的数据,然而在真实的业务场景中无法获取足够多且真实的打标数据,因此人们希望通过图像增强.语义理解.生成对 ...
- openCV【实践系列】4——使用Opencv进行斑点(blob)检测
本教程阐述了使用opencv进行简单的斑点检测 什么是斑点? 斑点是图像中的一组连接像素,它们共享一些共同属性(例如灰度值).在下图中,暗连通区域是斑点,斑点检测的目标是识别和标记这些区域. 简单的斑 ...
- OpenCV实战系列:高通滤波器及其应用
OpenCV实战系列:高通滤波器及其应用 0. 前言 1. 检测图像边缘 1.2 Sobel 滤波器 1.2 梯度算子 1.3 高斯导数 2. 图像拉普拉斯算子 2.1 拉普拉斯算子 2.2 使用拉普 ...
- HOG:从理论到OpenCV实践
HOG:从理论到OpenCV实践 时间 2014-03-11 22:55:57 CSDN博客 原文 http://blog.csdn.net/zhazhiqiang/article/details/ ...
- OpenCV delaunay三角剖分和voronoi镶嵌的实例(附完整代码)
OpenCV delaunay三角剖分和voronoi镶嵌的实例 OpenCV delaunay三角剖分和voronoi镶嵌的实例 OpenCV delaunay三角剖分和voronoi镶嵌的实例 # ...
最新文章
- java spring 服务器关闭_通过springboot怎么停止服务器??
- idea 中 git 修改了文件却无法提交(No Changes detected)
- python函数参数列表中的*与**
- View 绘制流程分析
- 四大主流芯片架构(X86、ARM、RISC-V和MIPS)
- html5 canvas获取坐标,HTML5 canvas坐标
- python 元类 详解_Python 元类详解 __new__、__init__、__call__、__metacalss__
- 如果不是心中还有梦,又能忍住多少痛?
- 琼斯是计算体心立方弹性模量_本科阶段固体物理期末重点计算题.doc
- 上海-苏州 100公里徒步旅行心情分享(二)
- U盘不显示容量,显示0字节,无法格式化
- 【python安装】错误——“User installations are disabled via policy on the machine”
- nested exception is java.sql.SQLException: Data truncated for column 'PassWord' at row 72
- leetcode回溯算法
- 二维码图片在微信无法识别(iOS)
- 【愚公系列】2022年10月 微信小程序-电商项目-小微商户支付功能前申请准备工作
- [PCIe] [电源管理] 面向硬件的ASPM链路状态和L1子状态
- python编程自学_Python编程自学:一小时python入门教程
- 剑指offer.把数字翻译成字符串
- 计算机清理垃圾文件丢失怎么恢复,垃圾箱清空了怎么恢复