【opencv入门学习--python】多边形点测试

如何使用OpenCV Python检测图像中的多边形? 我们首先检测图像中的所有对象轮廓以检测多边形。然后遍历所有轮廓。为每个轮廓查找近似的轮廓。如果近似轮廓中的顶数为5或更多,则将其绘制为三角形。请参见下面的伪代码。 for cnt in contours: approx = cv2.approxPolyDP() if len(approx) >= 5: cv2.drawContours() cv2.putText("Polygon") 步骤 我们可以使用以下步骤来检测图像中的多边形: 导入所需的库 阅读详情

例子源于OpenCV官网–多边形点测试
(https://docs.opencv.org/4.x/dc/d48/tutorial_point_polygon_test.html)

使用OpenCV函数cv::pointPolygonTest执行轮廓点测试:
该函数确定点是在轮廓线内、外,还是位于边缘(或与顶点重合)。它会相应地返回正(内部)、负(外部)或零(边缘)值。当measureDist=false时,返回值分别是+1,-1和0。否则,返回值是点和最近的轮廓边缘之间的符号距离。

代码:

from __future__ import print_function
from __future__ import division
import cv2 as cv
import numpy as np
# Create an image
r = 100
src = np.zeros((4*r, 4*r), dtype=np.uint8)
# Create a sequence of points to make a contour
#创建一个点序列,以形成一个轮廓
vert = [None]*6
vert[0] = (3*r//2, int(1.34*r))
vert[1] = (1*r, 2*r)
vert[2] = (3*r//2, int(2.866*r))
vert[3] = (5*r//2, int(2.866*r))
vert[4] = (3*r, 2*r)
vert[5] = (5*r//2, int(1.34*r))
# Draw it in src在src中绘制
for i in range(6):
    cv.line(src, vert[i],  vert[(i+1)%6], ( 255 ), 3)
# Get the contours得到的轮廓
contours, _ = cv.findContours(src, cv.RETR_TREE, cv.CHAIN_APPROX_SIMPLE)
# Calculate the distances to the contour计算到轮廓的距离
raw_dist = np.empty(src.shape, dtype=np.float32)
for i in range(src.shape[0]):
    for j in range(src.shape[1]):
        raw_dist[i,j] = cv.pointPolygonTest(contours[0], (j,i), True)
minVal, maxVal, _, maxDistPt = cv.minMaxLoc(raw_dist)
minVal = abs(minVal)
maxVal = abs(maxVal)
# Depicting the  distances graphically用图形表示距离
drawing = np.zeros((src.shape[0], src.shape[1], 3), dtype=np.uint8)
for i in range(src.shape[0]):
    for j in range(src.shape[1]):
        if raw_dist[i,j] < 0:
            drawing[i,j,0] = 255 - abs(raw_dist[i,j]) * 255 / minVal
        elif raw_dist[i,j] > 0:
            drawing[i,j,2] = 255 - raw_dist[i,j] * 255 / maxVal
        else:
            drawing[i,j,0] = 255
            drawing[i,j,1] = 255
            drawing[i,j,2] = 255
cv.circle(drawing,maxDistPt, int(maxVal),(255,255,255), 1, cv.LINE_8, 0)
cv.imshow('Source', src)
cv.imshow('Distance and inscribed circle', drawing)
cv.waitKey()

运行结果:

原图:
在这里插入图片描述
距离与内切圆:
在这里插入图片描述

OpenCVOpenCV基础教程(8)—— 几何形状的检测和拟合 8. 几何形状的检测和拟合 8.1 集的最小外包 8.1.1 最小外包矩形 OpenCV提供如下函数: cv::RotatedRect cv::minAreaRect(cv::InputArray points) points:接收三种集形式 ​ 第一种:N×2的Mat类型,每一行代表一个的坐标且数据类型只能是 CV_32S 或者 CV_32F; ​ 第二种:vector<Point>或者vector<Point2f>,即多个组成的向量; ​ 第三种:N×1的双通道Mat 阅读详情

相关推荐

(opencv)任意多边形检测

算法介绍: 对图像中的任意多边形进行检测 输入: 图像,多边形逼近精度,多边形最小面积 输出检测出的多边形 函数声明: vector<vector<Point>> polygonDetect(Mat&,double epsilon,int minAcreage); //多边形检测 调用: Mat matin=camera->read(); //视频流...

Sun_tian的博客 5467

OpenCV-Python实战(3)——OpenCV中绘制图形与文本

OpenCV 是一个的跨平台计算机视觉库,实现了图像处理和计算机视觉方面的很多通用算法。本文介绍了 OpenCV 提供的与绘制图形和文本相关的函数。在图形方面,我们了解了如何绘制基本图形(直线、矩形和圆形等)以及高级图形(剪裁线、箭头、椭圆和多边形)。在文本方面,我们了解了如何绘制文本以及 OpenCV 库中的所有可用字体。

盼小辉丶的博客 2万+

OpenCV轻松入门:面向Python【3.7】

本文介绍了OpenCV中与凸包相关的几何测试方法。主要内容包括:1)使用cv2.isContourConvex()函数判断轮廓是否为凸形;2)通过cv2.pointPolygonTest()计算到轮廓的最短距离或位置关系;3)利用cv2.createShapeContextDistanceExtractor()计算形状场景距离,比较不同形状的相似度。通过示例代码演示了这些函数的应用场景和运行结果,展示了它们在图像轮廓分析中的实际用途。

qq_43416206的博客 1033

python opencv 判断是否在区域内——cv2.pointPolygonTest()

python opencv 判断是否在区域内 cv2.pointPolygonTest()

you 是 mine 5174

Opencv C++图像处理:多边形测试 + 矩 + 凸包 + 映射 + 反向投影

备注:以下源码均可运行,不同项目涉及的函数均有详细分析说明。

📷 图像处理践行者 | 传统算法 · 深度学习 · 多模态 | 分享实战经验与技术洞见,探索从像素到智能的无限可能。 2325

opencv 判断多边形内外

基于PythonOpenCV 画出多边形,以及判断某个是不是在多边形内。 函数定义:cv2.pointPolygonTest(contour, pt, measureDist) 函数功能:找到图像里的和轮廓之间的最短距离. 它返回的距离当在轮廓外的时候是负值,当在轮廓内是正值,如果在轮廓上是0。 其中,contour 为轮廓多边形;pt 为坐标;measureDist, 若为True,是找带符号的距离;若为False,会找是否在内,外,或轮廓上(相

alex1801 7646

pythonopencv|读取图像(二十二)使用cv2.polylines()绘制多边形

掌握了python+opencv绘制多边形的基本技巧。

专注python+工程实践的热心婶子 2599

OpenCV-Python(21):凸缺陷检测多边形最短的距离求解

到轮廓的距离为正数表示在轮廓的外部,为负数表示在轮廓的内部,为零表示在轮廓上。它会返回一个数组,其中每一行包含的值是[起,终,最远的,到最远的近似距离]。1.创建一个小程序,可以将图片上的绘制成不同的颜色,颜色是根据这个到轮廓的距离来决定的。函数的第一个参数是模板图像的轮廓,第二个参数是目标图像的轮廓,第三个参数是形状匹配方法,第四个参数是匹配时的数值参数。接,在最远画一个圆圈,要记住的是返回结果的前三个值是轮廓的索引。函数计算该到轮廓的距离,根据距离设置的颜色。

图灵追幕者博客录 1350

python在图片中绘制多边形区域,并判断在不在此多边形区域内

在图片中绘制多边形区域,并判断在不在此多边形区域内 (自己学习使用) 1. 全部代码 import json import numpy as np import os from PIL import Image import matplotlib.pyplot as plt import cv2 ''' 在图片中绘制多边形区域 ''' def process_points(im_path,points,output_path): # 获取坐标信息, points = n

ftmsz12345678的博客 2991

python多边形分割_在PythonOpenCV多边形的凹凸角

问题我正在开发一个项目,我需要获得像形状一样的dumbell边界框.但是,我需要尽可能少的,并且盒子需要适合所有角落的形状.这是我测试的图像:Blurry, cracked, dumbell shape我不关心形状的间隙,我只想清理它,并将边缘拉直,这样我就可以得到这样的形状轮廓:Cleaned up我一直在尝试阈值()它,使用findContours()获取它的轮廓,然后使用approxPol...

weixin_39573535的博客 1498

Python OpenCV 多边形拟合相关案例

本文整理总结基本图像处理方面的凸多边形拟合相关方法,可以实现物体边缘的平滑、规整化处理。 以上处理算法的实质是对物体边缘进行减少或增加的过程,增加时可以实现边缘的规整化,减少时可以让曲线看上去更加平滑些。 1、Skimage实现图像边缘规整化处理 import matplotlib.pyplot as plt from skimage import data,color,morpholo...

人工智能讲师团 3757

Pythonopencv、圆、线、多边形、矩形

简介:机器学习视觉方向一般都需要在图像中添加标注框,标注框有着很大的用处,特别是对图像中某些需要关注的特征起到圈定的效果,方便对特征选择进行处理。 相关攻略: 机器学习:基本流程 Python:调用摄像头使用cv2库录制视频 Python:视频拆分成一帧一帧的图片 Python:利用cv2模块识别手势Python:利用cv2模块对图片进行灰度转换 Python:利用cv2模块对照片进行多个人脸检测 Python:使用cv2模块进行人脸识别Demo Python:处理cv2模块putText中文无法识别问题

we chat:玩转测试开发 2万+

多边形测试

输入轮廓。要测试。如果为真,该函数估计从到最近的轮廓边缘的符号距离。否则,函数只检查是否在轮廓线内。该函数确定是在轮廓线内、外,还是位于边缘(或与顶重合)。它会相应地返回正(内部)、负(外部)或零(边缘)值。当时,返回值分别是**+1**,和。否则,返回值是和最近的轮廓边缘之间的带符号距离。......

weixin_43229348的博客 931

多边形测试

目标:基于轮廓与边缘的参考,计算图像中每个像素到最近轮廓的距离,生成距离系数图像。 应用场景:对象跟踪时,可以判断一个或对象是否在指定区域内 首先需要获取几何图像的轮廓: contours, hierachy = cv.findContours(dst, cv.RETR_TREE, cv.CHAIN_APPROX_SIMPLE) 然后计算出每个像素距离轮廓的距离: dist_flag = cv.pointPolygonTest(contours[i],(col,row),True) .

aspirinLi的博客 405

基于人工智能实验平台的OpenCV多边形逼近对象检测

它是一个准确度参数。approxPolyDP()函数是opencv中对指定的集进行多边形逼近的函数,其逼近的精度可通过参数设置,返回参数是输出集,当前集是能最小包容指定集的,画出来即是一个多边形。我们右击相应的文件目录,选择new—>Python File,然后输入新建的文件名,击确定,相应的.py文件就建好了,可以进行编写代码了。第二个参数double epsilon:是一个距离值,即是原始曲线与近似曲线之间的最大距离,表示多边形的轮廓接近实际轮廓的程度,值越小,越精确。

lin_yu_cheng的博客 1212

OpenCV-Python实战(11)——OpenCV轮廓检测相关应用

在计算机视觉领域,轮廓通常指图像中对象边界的一系列。因此,轮廓通常描述了对象边界的关键信息,包含了有关对象形状的主要信息,该信息可用于形状分析与对象检测和识别。在本文中,我们将学习如何利用获取到的轮廓,进行形状分析以及对象检测和识别。

盼小辉丶的博客 1万+

python不同颜色的边_如何为多边形的每边使用不同的颜色?

这可能不是您想要的答案:)简短的回答不是真的。你不能在cv2中那样做。我还检查了大约5到6个其他库,它们也是一样的(我相信你也这样做了)。在但并不是所有的东西都失去了。我有一种强烈的感觉,cv2中的折线是用line函数实现的。在我生疏的cpp年代,以下是我在钻研opencvforlinux和mac的源代码时收集到的信息(https://github.com/Itseez/opencv/archiv...

weixin_32331345的博客 2324

OpenCV-Python -- Contours:More Functions

学习目标 凸性缺陷(convexity defects)以及如何寻找 寻找距离多边形最近的 匹配不同的形状 理论和代码 1. 凸性缺陷(Convexity Defects) 我们之前学习过凸包的相关知识。对象的任何关于凸包(hull)的偏差可以认为是凸性缺陷。OpenCV中,有相应的函数可以得到凸性缺陷,cv2.convexityDefects(),基本的用法如下: hull = cv2.convexHull(cnt,returnPoints = False) defects = cv2.convex

DAOCHI 450
上一篇: 【OpenCV入门学习--python】图像的矩Image Moments
下一篇: 【OpenCV入门学习--python】Image Segmentation with Distance Transform and Watershed Algorithm图像分割
喜欢星星的田螺姑娘
博客等级 码龄8年 16粉丝 · 45原创
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值