美文网首页
OpenCV定位轮廓的中点

OpenCV定位轮廓的中点

作者: 梁睿坤 | 来源:发表于2018-09-03 14:54 被阅读495次

本文将会用三个不同的示例说明用OpenCV如何进行形状的检测与分析。

从这三个示例中我们将会学到如何:

  1. 计算一个轮廓或图形区域的中心点,这项小技能会在以后很多的OpenCV项目中将会非常实用。
  2. 识别不同的形状,例如圆形,正方形、矩形、三角形、椭圆等。
  3. 标识形状名称
image

图像中包含了太多对于我们这个示例中没有意义信息,我们的目标是要从图中检测每个图形的轮廓线并计算其中心点,为了达到这个效果我们需要先对图像进行一些预处理:

  • 灰度化
  • 对图像进行模糊处理以减少轮廓边缘出现的噪点
  • 二值化图像,通常地边缘检测与读取阀值需要进行此过程
$ pip install imutils
import argparse
import imutils
import cv2
 
ap = argparse.ArgumentParser()
ap.add_argument("-i", "--image", required=True,
    help="path to the input image")
args = vars(ap.parse_args())
 
# 进行灰度化得到二值图
image = cv2.imread(args["image"])
gray = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)
blurred = cv2.GaussianBlur(gray, (5, 5), 0)
thresh = cv2.threshold(blurred, 60, 255, cv2.THRESH_BINARY)[1]

以下是上述代码的输出效果:

image

下一步就是调用OpenCV的findContour方法检测灰度化图片中的轮廓:

cnts = cv2.findContours(thresh.copy(), cv2.RETR_EXTERNAL,
    cv2.CHAIN_APPROX_SIMPLE)
cnts = cnts[0] if imutils.is_cv2() else cnts[1]

接下来就在每个轮廓上画出一个突出的边缘和标出中心点:

for c in cnts:
    # 获取中心点
    M = cv2.moments(c)
    cX = int(M["m10"] / M["m00"])
    cY = int(M["m01"] / M["m00"])
 
    # 画出轮廓和中点
    cv2.drawContours(image, [c], -1, (0, 255, 0), 2)
    cv2.circle(image, (cX, cY), 7, (255, 255, 255), -1)
    cv2.putText(image, "center", (cX - 20, cY - 20),
        cv2.FONT_HERSHEY_SIMPLEX, 0.5, (255, 255, 255), 2)
 
    #显示图像
    cv2.imshow("Image", image)
    cv2.waitKey(0)

上述代码中cv2.moments()是用于计算图像矩,然后通过图像矩计算质心。以下是代码的显示效果:

image

相关文章

  • OpenCV定位轮廓的中点

    本文将会用三个不同的示例说明用OpenCV如何进行形状的检测与分析。 从这三个示例中我们将会学到如何: 计算一个轮...

  • 【OPENCV】轮廓检测

    Tags: DIP findContours() void findContours(InputOutputArr...

  • opencv图像轮廓

    1.1什么是轮廓 cv2.findContours() 轮廓可以简单认为成连续的点(连着边界)连在一起的曲线,具有...

  • opencv 轮廓检测

  • openCV:图像轮廓

    查找轮廓 什么是轮廓 轮廓可以简单认为成连续的点(连着边界)连在一起的曲线,具有相同的颜色或者灰度。轮廓在形状分析...

  • OpenCV 之轮廓

    什么是轮廓 轮廓可以简单认为成将连续的点(连着边界)连在一起的曲线,具有相同的颜色或者灰度。轮廓在形状分析和物体的...

  • OpenCV 查找轮廓

    本文将结合实例代码,介绍 OpenCV 如何查找轮廓、获取边界框。 代码: contours.py[https:/...

  • opencv细化轮廓

    1.源码实现 2.编译源码 3.运行及其结果

  • C++ opencv-3.4.1 提取不规则物体的轮廓

    在学习opencv的时候,对一张照片,需要标注照片上物体的不规则轮廓。 如图: 使用opencv进行物体的轮廓处理...

  • Opencv轮廓检测findContours分析(层次结构)

    Opencv 轮廓检测相关api文档 opencv2的c++接口 官方文档相关api Finds contours...

网友评论

      本文标题:OpenCV定位轮廓的中点

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