opencv 绘制内切圆
先上效果图:
原图:
思路:
主要使用 cv2.pointPolygonTest 来寻找图像中所有点与轮廓的最短距离,根据函数的特性,轮廓外为负轮廓内为正,再使用 cv2.minMaxLoc 筛选,提取我们取最大值索引就是圆心坐标,最大值就是圆心半径。
详细说明:cv2.pointPolygonTest
Point Polygon Test
求解图像中的一个点到一个对象轮廓的最短距离。如果点在轮廓的外部,
返回值为负。如果在轮廓上,返回值为 0。如果在轮廓内部,返回值为正。
下面我们以点(50,50)为例:
dist = cv2.pointPolygonTest(cnt,(50,50),True) 此函数的第三个参数是 measureDist。如果设置为 True,就会计算最
短距离。如果是 False,只会判断这个点与轮廓之间的位置关系(返回值为
+1,-1,0)。
import cv2
import numpy as np# 读取图片,转灰度
mask = cv2.imread("6.jpg")
mask_gray = cv2.cvtColor(mask, cv2.COLOR_BGR2GRAY)
# 二值化
ret, mask_gray = cv2.threshold(mask_gray, 127, 255, cv2.THRESH_BINARY)# 识别轮廓
contours, _ = cv2.findContours(mask_gray, cv2.RETR_TREE, cv2.CHAIN_APPROX_SIMPLE)# 计算到轮廓的距离
raw_dist = np.empty(mask_gray.shape, dtype=np.float32)
for i in range(mask_gray.shape[0]):for j in range(mask_gray.shape[1]):raw_dist[i, j] = cv2.pointPolygonTest(contours[0], (j, i), True)# 获取最大值即内接圆半径,中心点坐标
minVal, maxVal, _, maxDistPt = cv2.minMaxLoc(raw_dist)# 半径:maxVal 圆心:maxDistPt
# 转换格式
maxVal = abs(maxVal)
radius = int(maxVal)# 原图转换格式
result = cv2.cvtColor(mask_gray, cv2.COLOR_GRAY2BGR)# 绘制内切圆
cv2.circle(result, maxDistPt, radius, (0, 255, 0), 2, 1, 0)
# 绘制圆心
cv2.circle(result, maxDistPt, 1, (0, 255, 0), 2, 1, 0)
cv2.imshow('0', result)
cv2.waitKey(0)
opencv 绘制内切圆相关推荐
- 使用Python,Opencv绘制调色板及圆形来模拟霓虹的渐变效果
使用Python,Opencv绘制调色板及圆形来模拟霓虹的渐变效果 1. 效果图 2. 源码 参考 这篇博客将使用python,opencv绘制调色板及圆形来模拟霓虹的渐变效果. 1. 效果图 可以构 ...
- 计算机视觉开源库OpenCV绘制轮廓,并将轮廓排序~
计算机视觉开源库OpenCV绘制轮廓,并将轮廓排序~示例效果如下: 原图: 示例代码如下: #!/usr/bin/env python3import cv2def sort_contours(cnts ...
- OpenCV绘制等高线Contours的实例(附完整代码)
OpenCV绘制等高线Contour的实例 OpenCV绘制等高线Contour的实例 OpenCV绘制等高线Contour的实例 #include "opencv2/imgproc.hpp ...
- [Python从零到壹] 三十五.图像处理基础篇之OpenCV绘制各类几何图形
欢迎大家来到"Python从零到壹",在这里我将分享约200篇Python系列文章,带大家一起去学习和玩耍,看看Python这个有趣的世界.所有文章都将结合案例.代码和作者的经验讲 ...
- 详解用OpenCV绘制各类几何图形
本文分享自华为云社区<[Python从零到壹] 三十五.图像处理基础篇之OpenCV绘制各类几何图形>,作者:eastmount. 一.绘制直线 在OpenCV中,绘制直线需要获取直线的起 ...
- OpenCV绘制线、矩形、圆等基本几何形状
OpenCV绘制线.矩形.圆.椭圆等基本几何形状 画线 画矩形 画圆 通过javaOpenCV中的Imgproc函数进行简单几何图形的绘制 画线 代码 public class DemoMat {st ...
- opencv 绘制图像轮廓
图像轮廓概念 轮廓是一系列相连的点组成的曲线,代表了物体的基本外形. 谈起轮廓不免想到边缘,它们确实很像.简单的说,轮廓是连续的,边缘并不全都连续(下图).其实边缘主要是作为图像的特征使用,比如可以用 ...
- Opencv绘制HSV颜色直方图
一. 使用Opencv绘制HSV颜色直方图 所用的函数 cvCvtColor 可在: 使用Opencv将RGB颜色空间转换到HSV颜色空间/灰度图 文章中查找相关介绍 所使用的结构体: CvHisto ...
- python opencv 绘制简单图形
09-python opencv 绘制简单图形 09-python opencv 绘制简单图形 概述 实现过程 引用与创建空图 绘制直线 绘制矩形 绘制圆 绘制椭圆 添加文字 显示图像 源代码 运行结 ...
- python用函数绘制椭圆_Python学习笔记——opencv绘制椭圆
在Python环境下使用opencv绘制椭圆,需要用到cv2.ellipse() 函数. 下面一段示例程序就是用该函数在黑色背景下,绘制一个圆心在(260,240).长轴170.短轴130.线宽为3的 ...
最新文章
- AttributeError: 'dict' object has no attribute 'status_code'
- 港大徐爱民组研究助理招聘-内分泌代谢方向
- 5.1 指针与地址 (C)
- WIN7的MKLINK命令,创建文件(夹)连接(链接)
- 文件传输_python socket实现文件传输(防粘包)
- 理解JavaScript的执行机制
- 教你如何成为解决问题的高手
- Python 文件读和写
- 小米台灯底座接口很松_选购台灯发愁?这篇桌面照明方案助你一臂之力
- [转载] Python pep8编码规范
- 【通信】基于matlab Alamouti空频编码【含Matlab源码 801期】
- Excel中vba教程——设置行高实例
- Undefined symbols for architecture x86_64:xxxxxx, referenced from:
- C程序10 自由落体
- 面包屑导航html页面,react怎么实现面包屑导航
- 图像的二阶导数为何对噪声尤为敏感-----图像二阶导数的本质
- 敬业福!2023官方集福攻略
- html文字段落加边框线,html给文字加边线框的代码
- BOM(材料清单)整理及文件格式说明
- PAT 1056 Mice and Rice