opencv - 使用 OpenCV 进行三角形检测

标签 opencv object-detection

我有以下示例图片:

enter image description here

我想用白色填充角落里的这些三角形。我如何使用 OpenCV 检测它们?当然,在这个特定的示例中,我可以只依靠渐变或亮度。尽管如此, future 图像的形状不会如此完美,所以我正在考虑一些形状检测。

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

OpenCV 中的轮廓检测没有帮助,因为它找到了太多候选对象。 我尝试使用大小为 3 的 approxPolyDP,但也没有结果(没有找到这样的对象)。

这些三角形将永远是三角形,但它们不需要每次都触及柱线。它们总是位于图像的边缘。它们共享大致相同的区域。

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

最佳答案

我可以用下面的代码检测三角形。我找到图像中的所有轮廓,然后使用 approxPolyDP,我能够找到三角形。

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)

输出图像 enter image description here

您可以在坐标列表中获取轮廓。

关于opencv - 使用 OpenCV 进行三角形检测,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46300244/

相关文章:

opencv - 我们如何在opencv中启动和停止网络摄像头?

c - opencv 函数 cvCreateMatHeader 中的非正宽度或高度

python-3.x - 如何从保存的模型生成 tflite?

c++ - 如何释放 cvHaarDetectObjects 的内存?

c++ - 使用 C++ 在 OpenCV 中矩阵中的多维数据

python - 如何在 Tensorflow 对象检测 API 中使用两个模型

python - opencv 在实时视频中计数对象 - 需要帮助对一盒面粉进行条件计数

python - 如何在检测后从图像中提取文本区域

具有定向梯度直方图 (HOG) 特征类型的 OpenCV 级联分类

ios - 编辑 HSL 转换失败的 RGB 色彩空间图像