gpt4 book ai didi

opencv - 从图像中检测三角形、椭圆和矩形

转载 作者:太空宇宙 更新时间:2023-11-03 21:08:07 25 4
gpt4 key购买 nike

我正在尝试检测交通标志的区域。使用OpenCV,我的做法如下:

彩色图像:

enter image description here

使用 TanTriggs Preprocessing消除光照差异:

enter image description here

均衡直方图:

enter image description here

然后二值化 (Cv2.Threshold(blobs, blobs, 127, 255, ThresholdTypes.BinaryInv):

enter image description here

使用 ConnectedComponents 迭代每个 blob和 get the mean color value使用 blob 作为掩码。如果它是红色,则它可能是红色标志。

然后使用 FindContours 获取此 blob 的轮廓.

使用 ApproxPolyDP 简化轮廓并检查每个轮廓的点:

  • 如果有 3 个点那么三角形是可以接受的 --> 三角形标志的候选
  • 如果 4 分那么形状是可以接受的 --> 候选人
  • 如果超过 4 个点,BBox 尺寸是可以接受的,并且大多数点都在拟合的椭圆上 ( FitEllipse ) --> 候选

此方法适用于二进制图像中的分离 Blob ,例如我示例中的圆形 100 公里标志。但是,如果与外部对象有连接,如二值图像中的三角形左下部分,则失败。

enter image description here

因为,这个 Blob 的平均值远非红色!

使用 Erosion在某些情况下有所帮助,但在许多其他图像中会使情况变得更糟。

使用不同的二值化阈值对某些人也有效,但对许多人无效;就像侵 eclipse 。

使用 HoughCircle只是非常慢,我无法通过参数来获得好的结果。

我试过使用 matchShapes 但没有得到好的结果。

谁能告诉我另一种方法来实现我想要的(用合理的计算时间)?

欢迎使用任何语言的任何信息或代码。

编辑:使用circularity measure ( C=P^2/4πA ) 或我上面介绍的方法,三角形和椭圆形分开后可以找到。然而,当轮廓是这样的,例如: enter image description here

我找不到一种可靠的方法来提取三角形部分。如果可以的话,我会检查平均颜色,并确定它是否是红色标志候选者。

最佳答案

抱歉,我没有资格发表评论,但你不能使用红色吗?

import common
myshow = common.myshow

img = cv2.imread("ms0QB.png")
grey = np.zeros(img.shape[:2],np.uint8)
hsv = cv2.cvtColor(img,cv2.COLOR_mask = np.logical_or(hsv[:,:,0]>160,hsv[:,:,0]<10 )
grey[mask] = 255
cv2.imshow("160<hue<182",grey)
cv2.waitKey()

关于opencv - 从图像中检测三角形、椭圆和矩形,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42604572/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com