美文网首页
查找轮廓实现物体计数1(在质点绘制说明)

查找轮廓实现物体计数1(在质点绘制说明)

作者: 大龙10 | 来源:发表于2023-09-30 12:54 被阅读0次

    书名:计算机视觉40例从入门到深度学习:OpenCV-Python
    作者:李立宗
    出版社:电子工业出版社
    出版时间:2022-07-01
    ISBN:9787121436857


    • 实践中,经常需要对图像内的对象进行计数,如细胞计数等。
    • 通过查找轮廓的方式实现对细胞的计数。

    一、轮廓与边缘

    • 轮廓与边缘的区别在于,
      边缘是不连续的,检测到的边缘并不一定是一个整体;
      轮廓是连续的,是一个整体。
    • 由于轮廓是连续的,所以能够通过计算轮廓数量的方式,实现图像内的物体计数。
    • 需要注意的是,查找轮廓的同时会找到图像内细小斑点等噪声的轮廓。
      因此,在计数时,需要去除那些非常小的轮廓,只计算那些相对较大的轮廓。

    二、理论基础

    1、图像的中心点

    • 如何获取图像的中心点呢?
      实践中,往往通过图像的矩信息获取其中心点

    • 一般采用质心来表示中心点。质心,通常指“质量中心”,在图像密度均匀的情况下,质心与中心点是一样的。

    • 轮廓是图像非常重要的一个特征,利用轮廓能够非常方便地获取图像的面积、质心、方向等信息。
      借助这些特征和统计信息,能够方便地对图像进行识别。

    • 比较两个轮廓最简单的方法是比较二者的轮廓矩。
      轮廓矩代表了一个轮廓、一幅图像、一组点集的全局特征。
      矩信息包含了对应对象不同类型的几何特征,如大小、位置、角度、形状等。
      矩信息被广泛地应用在模式识别、图像识别等方面。

    2、获取图像的中心点

    • OpenCV提供了函数cv2.moments()来获取图像的矩特征,使用该函数能够非常方便地获取图像的质心(中心点)。

    三、在一个对象的质点绘制文字说明

    import cv2
    
    o = cv2.imread("d:\\cup.jpg",1)
    cv2.imshow("original",o)
    
    gray = cv2.cvtColor(o,cv2.COLOR_BGR2GRAY)
    ret , binary = cv2.threshold(gray , 200 , 255  ,cv2.THRESH_BINARY)
    cv2.imshow("binary",binary)
    
    contours , hierarchy = cv2.findContours(binary , cv2.RETR_LIST ,
            cv2.CHAIN_APPROX_SIMPLE)
    
    x=cv2.drawContours(o,contours, 1,(0,0,255),3)
    
    m00=cv2.moments(contours[1])['m00']
    m10=cv2.moments(contours[1])['m10']
    m01=cv2.moments(contours[1])['m01']
    cx=int(m10/m00)
    cy=int(m01/m00)
    
    cv2.putText(o,"cup", (cx, cy), cv2.FONT_HERSHEY_SIMPLEX,2,(0,0,255),3 )
    
    cv2.imshow("result",o)
    cv2.waitKey()
    cv2.destroyAllWindows()
    
    

    相关文章

      网友评论

          本文标题:查找轮廓实现物体计数1(在质点绘制说明)

          本文链接:https://www.haomeiwen.com/subject/bqsdbdtx.html