Opencv算法记录:如何使用Opencv求解圆与轮廓、直线的交点

这篇具有很好参考价值的文章主要介绍了Opencv算法记录:如何使用Opencv求解圆与轮廓、直线的交点。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

嵌入式C语言学习进阶系列文章

GUN C编译器拓展语法学习笔记(一)GNU C特殊语法部分详解
GUN C编译器拓展语法学习笔记(二)属性声明
GUN C编译器拓展语法学习笔记(三)内联函数、内建函数与可变参数宏
数组存储与指针学习笔记(一)数据类型与存储、数据对齐、数据移植、typedef



  最近涉及到Opencv用来求解轮廓与直线或者圆等规则物体的交点问题,特写下如下文章记录此。简单作出解释:通过创建轮廓与所求图像的掩膜,然后两者通过逻辑与运算得出交点位置。同理,求解两轮廓的交点方式也是一样的。文章来源地址https://www.toymoban.com/news/detail-512604.html

DEBUG = True
def contourCirclesIntersect(original_image, contour, circles):
    '''
    计算轮廓与内外圆的圆弧以及圆弧的圆心角
        @contour:轮廓数组
        @circles:圆坐标(cx,cy,r)
        return:
        @points:交点数组
        @arc_angle:圆弧圆心角
    '''
    # 获取图像大小
    blank = np.zeros(original_image.shape[0:2])
    # 创建轮廓与圆形的掩膜
    image1 = cv2.drawContours(blank.copy(), contour, -1, 2)
    image2 = cv2.circle(blank.copy(),(circles[0],circles[1]),circles[2],1,2)
    # 逻辑与判断交点
    intersection = np.logical_and(image1, image2)
    # 获得交点位置
    points = np.argwhere(intersection==True)
    if len(points) >= 2: # 找出大于2个交点的领域
        arc_angle = calcArcAngle(original_image,
        center=(circles[0],circles[1]),
        start=(points[0][1],points[0][0]),
        end=(points[-1][1],points[-1][0]),
        radius=circles[2],
        fill=1,
        color=(255,255,0)
        )
    R = circles[2]     
    if DEBUG:
        if len(points):
            cv2.circle(original_image,(points[0][1],points[0][0]),1,(0,255,0),2)
            cv2.circle(original_image,(points[-1][1],points[-1][0]),1,(0,255,0),2)
            cv2.line(original_image,(circles[0],circles[1]),(points[0][1],points[0][0]),(0,255,0),1)
            cv2.line(original_image,(circles[0],circles[1]),(points[-1][1],points[-1][0]),(0,255,0),1)
    return points,arc_angle

def contourLineIntersect(original_image,contour,line_pt):
    '''
        计算轮廓与直线的交点
        @contour:轮廓数组
        @line_pt:直线两点坐标[(x1,y1),(x2,y2)]
        return:
       	@points:交点数组
    '''
    # 获取图像大小
    blank = np.zeros(original_image.shape[0:2])
    # 创建轮廓与直线的掩膜
    image1 = cv2.drawContours(blank.copy(), contour, -1, 2)
    image2 = drawLine(blank.copy(),(line_pt[0][0],line_pt[0][1]),(line_pt[1][0],line_pt[1][1]))
    # 逻辑计算
    intersection = np.logical_and(image1, image2)
    # 获得交点位置
    points = np.argwhere(intersection==True)
    if DEBUG:
        if len(points):
            print('contourLineIntersect:',points)
            cv2.circle(original_image,(points[0][1],points[0][0]),1,(0,255,0),2)
            cv2.circle(original_image,(points[-1][1],points[-1][0]),1,(0,255,0),2)
    return points

到了这里,关于Opencv算法记录:如何使用Opencv求解圆与轮廓、直线的交点的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • OpenCV如何实现直线检测

    本文主要介绍OpenCV自带的直线检测函数HoughLines()的用法,这个函数的第一个参数是一个二值化图像,所以在进行霍夫变换之前要首先进行二值化,或者进行Canny 边缘检测。第二和第三个值分别代表beta; 和 theta; 的精确度。第四个参数是阈值,只有累加其中的值高于阈值时才被

    2024年02月14日
    浏览(29)
  • Opencv之RANSAC算法用于直线拟合及特征点集匹配详解

    讲述Ransac拟合与最小二乘在曲线拟合上的优缺点 讲述在进行特征点匹配时,最近邻匹配与Ransac匹配的不同之处 另外,Ransac也被用于椭圆拟合、变换矩阵求解等 1.1 原理 RANSAC(RANdom SAmple Consensus,随机采样一致)算法是从一组含有“外点”(outliers)的数据中正确估计数学模型参数的

    2024年02月05日
    浏览(29)
  • 【Python】【OpenCV】凸轮廓和Douglas-Peucker算法

    针对遇到的各种复杂形状的主体,大多情况下,我们可以求得一个近似的多边形来简化视觉图像处理,因为多边形是由直线组成的,这样就可以准确的划分区域来便捷后续的操作。   cv2.arcLength() Method: 参数: curve :要计算周长的轮廓,可以是一个矩形、圆形、多边形等封闭

    2024年02月05日
    浏览(32)
  • 如何在OpenCV中实现图像的边缘检测和轮廓提取?opencv教程

    在OpenCV中,可以使用边缘检测算法和轮廓提取函数来实现图像的边缘检测和轮廓提取。以下是一种常用的方法: 边缘检测: 在OpenCV中,常用的边缘检测算法包括Canny边缘检测和Sobel算子。 Canny边缘检测: Canny边缘检测是一种广泛使用的边缘检测算法,它能够有效地检测出图像

    2024年02月15日
    浏览(26)
  • opencv 基础54-利用形状场景算法比较轮廓-cv2.createShapeContextDistanceExtractor()

    注意:新版本的opencv 4 已经没有这个函数 cv2.createShapeContextDistanceExtractor() 形状场景算法是一种用于比较轮廓或形状的方法。这种算法通常用于计算两个形状之间的相似性或差异性,以及找到最佳的匹配方式。 下面是一种基本的比较轮廓的流程,使用了形状场景算法: 数据准

    2024年02月13日
    浏览(24)
  • 【OpenCV实现图像:使用OpenCV进行物体轮廓排序】

    在图像处理中,经常需要进行与物体轮廓相关的操作,比如计算目标轮廓的周长、面积等。为了获取目标轮廓的信息,通常使用OpenCV的findContours函数。然而,一旦获得轮廓信息后,可能会发现轮廓的顺序是无序的,如下图左侧所示: 在这个图中,每个轮廓都被找到,但它们的

    2024年02月03日
    浏览(29)
  • OpenCV使用SURF和SIFT算法报错解决记录

    OpenCV使用SURF和SIFT算法报错解决记录 1.报错代码,使用以下两种写法都会报错 第一种报错 AttributeError: module ‘cv2’ has no attribute ‘xfeatures2d’ 第二种报错 AttributeError: module ‘cv2’ has no attribute ‘SURF_create’ 2.查找网络上的解决办法,大部分分为两种 SIFT和SURF算法申请了专利,

    2024年02月07日
    浏览(29)
  • 【Python】【OpenCV】绘制外接矩形、外接圆 以及 凸轮廓和Douglas-Peucker算法

     外接矩形、外接圆:   1、cv2.boundingRect() Method 和 cv2.minAreaRect() Merhod:前者只寻找和 x、y轴 平行的矩形,后者则可以出现旋转角度。 2、cv2.drawContours() Method:第二个参数接收的是轮廓信息,但是这个轮廓信息需要以 tuple or list or set类型(或者说是iterable)才可以传入。 请注

    2024年02月05日
    浏览(35)
  • 关于uniapp中使用opencv.js拍照提取纸张轮廓

    1.效果图片 2.下载opencv.js   比如下载 4.5.0 版本的 opencv.js 文件 https://docs.opencv.org/4.5.0/opencv.js 3.引入 opencv.js放在static文件夹下 页面中引入 let cv = require(\\\'../../static/opencv/opencv.js\\\'); 4.进入正题    //页面先放一个隐藏图片     img id=\\\"imageUrl\\\" alt=\\\"No Image\\\" style=\\\"display: none;\\\" /    //获取

    2024年02月04日
    浏览(26)
  • [C++] opencv - drawContours(绘制轮廓)函数介绍和使用场景

    OpenCV中的drawContours函数用于在图像上绘制轮廓。其函数原型如下: 比较复制插入新建 参数说明: image: 输出图像,即绘制轮廓后的图像。 contours: 轮廓集合,每个轮廓由一系列点组成。 contourIdx: 轮廓索引数组,指定要绘制哪些轮廓。如果为NULL,则绘制所有轮廓。 contourC

    2024年01月19日
    浏览(40)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包