Opencv 检测图像中的三角形、椭圆和矩形
我正试图探测交通标志的区域。使用OpenCV,我的方法如下: 彩色图像: 使用“消除照明差异”选项: 均衡直方图: 和二值化Opencv 检测图像中的三角形、椭圆和矩形,opencv,detection,Opencv,Detection,我正试图探测交通标志的区域。使用OpenCV,我的方法如下: 彩色图像: 使用“消除照明差异”选项: 均衡直方图: 和二值化(Cv2.Threshold(blob,blob,127255,ThresholdTypes.binarynv): 使用并使用blob作为掩码迭代每个blob。如果它是红色,则可能是红色符号 然后,使用该工具获取该斑点的轮廓 使用简化轮廓并检查每个轮廓的点: 如果有3个点,则三角形形状是可接受的-->三角形符号的候选形状 如果有4个点,则形状是可接受的-->候选形
(Cv2.Threshold(blob,blob,127255,ThresholdTypes.binarynv)
:
使用并使用blob作为掩码迭代每个blob。如果它是红色,则可能是红色符号
然后,使用该工具获取该斑点的轮廓
使用简化轮廓并检查每个轮廓的点:
- 如果有3个点,则三角形形状是可接受的-->三角形符号的候选形状
- 如果有4个点,则形状是可接受的-->候选形状
- 如果超过4个点,则BBox尺寸是可接受的,并且大多数点位于拟合的椭圆上()-->候选者
匹配形状
,但没有得到好的结果
有谁能告诉我实现我想要的目标的另一种方法(用合理的计算时间)
任何语言的任何信息或代码都是wellcome
编辑:
使用()或我上面描述的方法,当三角形和椭圆分开时,可以找到它们。但是当轮廓像这样时,例如:
我找不到一个可靠的方法来提取三角形块。如果可以,我会检查平均颜色,并确定它是否为红色标志候选。对不起,我没有资格发表评论,但你不能使用红色吗
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()
导入通用
myshow=common.myshow
img=cv2.imread(“ms0QB.png”)
灰色=np.零(图像形状[:2],np.uint8)
你试过形态开放(侵蚀+扩张)吗而不仅仅是腐蚀?它可以帮助去除噪声连接,同时保留原来坚固的连接部件。机器学习是否适用于该任务?如果您拥有一些交通标志学习基础,您可以训练一个Haar级联或神经网络来为您进行标志检测。如果仍然接近从图像处理方面来看,您可以看看这篇文章:。它提供了一个快速而健壮的Hough transofrm,但不幸的是,我没有看到它在OpenCV或任何地方实现。是的,训练样本最好只包含所需的检测目标(背景或其他方面的一些小错误)。目标应该从不同的视角呈现。除非我错得很厉害,否则这将涉及到任何分类器和描述性特征的选择。对不起,我从另一个角度理解了你的意思。这是一个值得注意的问题,但是,我恐怕无法从零开始判断问题所在。尽管我可以建议照明规范化(上述TanTriggs预处理)对于训练集和测试集。也许这可以简化分类器的任务。这是一个好主意。实际上,我的应用程序有一些迭代来查找ROI。对于HSV,我使用minH=169;maxH=7;minS=0;maxS=40;minV=230;maxV=30。另一个迭代基于实验室颜色,另外两个迭代基于Hasan Fleyeh关于segmentat的论文离子。我检查这些在某些情况下(雾、日落照明)可能不成功。我还尝试寻找其他颜色标志,包括黑白标志。我正在搜索是否可以在一个文件中使用TanTriggs预处理解决所有颜色问题;并提高性能。