PFBZSC 发表于 2022-12-9 19:10:06

关于OpenCV识别红绿灯的识别方面问题

是这样的,要做一个用树莓派来识别红绿灯信号的项目,大概的思路流程就是

提前用摄像头拍下红绿黄三种颜色灯的图片

摄像头获取画面
使用OpenCV的cv2.matchTemplate()来实现在获取的图片中找出提前准备好的红绿黄颜色的灯
因为cv2.matchTemplate()貌似是必定会找出一个最为相近的
为了确保不会误识别,我使用了三直方图对比的方法来对比图片,只要相似度>0.65就认为识别到的是正确的

但这样做有很大的局限性
首先cv2.matchTemplate()只能找相同大小的图片,也就是说识别的位置被限制死了,前一点后一点都不行,必须刚刚好的距离才能识别

其次摄像头获取的画面可能会因为光线等一堆奇奇怪怪的因素导致不同,这样的话他可能就识别不出来了
例如(红绿灯模型和树莓派没在身边,没法拍图片,只能用文字描述了,不过结尾有测试时留下的照片,勉强能看,还请见谅)
在A时刻拍摄到的红灯是这样的:灯的中心有红色实心圆,向外扩散渐变成黄色光圈
在B时刻拍摄到的照片可能会出现红色圆比A时刻的更大或更小,红色可能更深或更浅,黄色光圈扩散更强之类的情况
加上买了三个模型灯,亮度还不一样,所以经常识别不到

并且这样的识别后又比较的方法有点低效

这里想请教一下懂OpenCV的大佬们要怎么办?
有没有更好的方法来替换掉cv2.matchTemplate()
或者是换一种对比图像的方法,还是?

就如上面所说红绿灯模型和树莓派没在身边,没法拍图片,所以提供不了实拍的照片,但之前测试留下的图片或许能勉强派上点用场,凑合着看看⑧


PFBZSC 发表于 2022-12-9 19:14:18

上面对于红灯的描述说错了:"灯的中心有红色实心圆,向外扩散渐变成黄色光圈"
这里的红色和黄色搞反了,应该是:
"灯的中心有黄色实心圆,向外扩散渐变成红色光圈"

阿奇_o 发表于 2022-12-9 21:53:30

没玩过,但接近“自动驾驶”那样的,似乎是用 “大数据” 训练出来的吧。。 单纯靠几张或几十张图片,即使算法再优秀,识别能力应该也很有限。。

PFBZSC 发表于 2022-12-10 17:40:43

阿奇_o 发表于 2022-12-9 21:53
没玩过,但接近“自动驾驶”那样的,似乎是用 “大数据” 训练出来的吧。。 单纯靠几张或几十张图片,即使 ...

试过,但貌似不彳亍,好像是因为三种灯对它来说太像了区分不出来还是啥的。貌似只适用于人脸啥的那种

KeyError 发表于 2022-12-15 15:31:05

{:10_266:}
我也是。

PFBZSC 发表于 2022-12-20 19:47:11

PFBZSC 发表于 2023-1-4 23:46:24

顶!

陶远航 发表于 2023-1-5 11:04:33

识别发光部位(一般有光圈),对比RGB的数值

PFBZSC 发表于 2023-1-7 23:04:15

陶远航 发表于 2023-1-5 11:04
识别发光部位(一般有光圈),对比RGB的数值

能否细说?说实话是刚接触opencv,不是很懂

PFBZSC 发表于 2023-1-8 15:29:38

PFBZSC 发表于 2023-1-8 21:33:45

陶远航 发表于 2023-1-5 11:04
识别发光部位(一般有光圈),对比RGB的数值

救!急!

PFBZSC 发表于 2023-1-8 23:48:39

陶远航 发表于 2023-1-9 09:41:58

PFBZSC 发表于 2023-1-8 21:33
救!急!

我也不太明白

changwolf1 发表于 2023-1-10 16:46:48

sfqxx 发表于 2023-1-10 17:55:26

顶🔝

陶远航 发表于 2023-4-9 17:58:34

针对你提出的问题,可以考虑以下几个方面进行优化:

1. 图像预处理

在图像预处理阶段,可以对图像进行一些处理操作,比如灰度化、二值化、滤波、边缘检测等等,以便更好地识别出红绿灯的区域。同时,可以考虑使用自适应阈值法等方法来解决光照变化等问题。

2. 特征提取

使用特征提取的方法,例如SIFT、SURF、ORB等方法来提取红绿灯的特征点,然后通过匹配这些特征点来进行识别。这种方法可以比较好地解决不同大小、角度和光照条件下的红绿灯识别问题。

3. 深度学习

可以使用深度学习的方法来进行红绿灯识别。可以使用卷积神经网络(CNN)、循环神经网络(RNN)等方法来进行训练,然后使用训练好的模型来进行红绿灯识别。这种方法可以处理复杂的情况,并且可以自适应地学习新的特征,但是需要大量的数据和计算资源。

4. 相关性检测

相比模板匹配,相关性检测(correlation-based detection)可以更好地处理光照变化和噪声。对于红绿灯识别,可以使用相关性检测来进行颜色和形状的匹配。相关性检测的基本思想是计算模板和输入图像之间的相关系数,然后选择相关系数最高的区域作为匹配结果。

综上所述,根据不同的场景和需求,可以选择不同的方法来进行红绿灯识别。

歌者文明清理员 发表于 2023-4-18 10:33:29

除了使用cv2.matchTemplate()外,OpenCV还提供了很多其他的图像匹配算法,例如SIFT(Scale-Invariant Feature Transform)和SURF(Speeded-Up Robust Features)等特征点检测算法。这些算法能够找出图像中的关键点,并且计算出它们的数量、大小、位置等信息,从而实现图像之间的匹配和识别。

除此之外,你还可以尝试使用神经网络模型实现红绿灯的识别。近年来,深度学习技术在计算机视觉领域得到了广泛应用,包括目标检测、图像分割、物体跟踪等。通过使用卷积神经网络(CNN)等模型,可以从大量的数据中学习到图像中的特征,并且对于光线变化、尺寸变化等情况也有一定的鲁棒性。但是相对于传统算法,使用神经网络需要更多的训练数据和计算资源。

另外,你可以考虑对图像进行预处理,例如去噪、增强对比度、颜色平衡调整等方式来提高图像质量和稳定性,同时可以通过修改算法参数以及使用多尺度搜索等方式来增强算法的适用性和鲁棒性。
页: [1]
查看完整版本: 关于OpenCV识别红绿灯的识别方面问题