基于OpenCV的三角形检测 [英] Triangle detection using OpenCV

查看:0
本文介绍了基于OpenCV的三角形检测的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我有以下示例图片:

我想用白色填充这些角上的三角形。我如何使用OpenCV检测它们?当然,在这个特殊的样本中,我可以只依赖于渐变或亮度。然而,在未来的图像将不会是如此完美的形状,所以我在考虑一些形状检测。

我听说形状通常可以通过例如霍夫变换来检测。但我不知道我应该从什么开始。

OpenCV中的轮廓检测无济于事,因为它发现了太多候选对象。 我尝试使用SIZE=3的ApproxPolyDP,但也没有结果(没有找到这样的对象)。

这些三角形将始终是三角形,但它们不需要每次都接触条。它们将始终位于图像的边缘。它们之间的面积大致相同。

我希望能够在某些容器中检测三角形并收集与这些三角形对应的点。

推荐答案

我可以用下面的代码检测到这个三角形。我正在查找图像中的所有轮廓,然后使用近似PolyDP,我能够找到三角形。

import cv2
import numpy as np
image_obj = cv2.imread('image.jpg')

gray = cv2.cvtColor(image_obj, cv2.COLOR_BGR2GRAY)

kernel = np.ones((4, 4), np.uint8)
dilation = cv2.dilate(gray, kernel, iterations=1)

blur = cv2.GaussianBlur(dilation, (5, 5), 0)


thresh = cv2.adaptiveThreshold(blur, 255, 1, 1, 11, 2)

# Now finding Contours         ###################
_, contours, _ = cv2.findContours(
    thresh, cv2.RETR_LIST, cv2.CHAIN_APPROX_SIMPLE)
coordinates = []
for cnt in contours:
        # [point_x, point_y, width, height] = cv2.boundingRect(cnt)
    approx = cv2.approxPolyDP(
        cnt, 0.07 * cv2.arcLength(cnt, True), True)
    if len(approx) == 3:
        coordinates.append([cnt])
        cv2.drawContours(image_obj, [cnt], 0, (0, 0, 255), 3)

cv2.imwrite("result.png", image_obj)
输出图像

您可以在坐标列表中获取等高线。

这篇关于基于OpenCV的三角形检测的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆