我现在已经有一段时间了,但是找不到合适的解决方案。
我使用OpenCV进行图像处理,我的工作流程是这样的:
但这太慢了(在每个通道上循环(RGB),然后循环为阈值等等)并且因为它没有检测到很多电视而不是很好。
我的基本代码是OpenCV框架的squares.cpp示例。
电视屏幕检测的主要问题是:
我也在矩形检测中搜索了许多SO问题/答案,但都是关于检测暗背景上的白页或对比背景上的固定颜色对象。
我的最终目标是在Android / iOS上实现此功能,以实现近乎实时的电视屏幕检测。我的代码在Galaxy Nexus上最多需要4秒钟。
希望有人能提供帮助。提前谢谢!
更新1:只使用canny和houghlines,不起作用,因为可能有很多行,选择正确的行可能非常困难。我认为应首先对图像进行某种“清洁”。
更新2 :question是最接近问题的地方之一,但对于电视屏幕,它无效。
答案 0 :(得分:4)
希望这些观点提供一些见解:
1)
如果您可以通过前景和背景正确分割图像,则可以轻松地在前景周围设置边界框。图形切割是分割图像的非常强大的方法。 OpenCV似乎为它提供了易于使用的实现。因此,例如,您提供了一些覆盖“前景”和“背景”像素的笔触,并且您的图像将转换为最佳切片以分割两者的图形。这是一个有趣的例子:
http://docs.opencv.org/trunk/doc/py_tutorials/py_imgproc/py_grabcut/py_grabcut.html
这是我用一个快速的东西来说明它的有效性:
2)
如果您决定继续沿着边缘检测路线行进,那么在尝试拟合物体周围的边界框或轮廓之前,请考虑使用“数学形态学”来“清理”您检测到的线条。
http://en.wikipedia.org/wiki/Mathematical_morphology
3)
您可以在包含电视的数据集中进行训练,并使用中提琴算法进行对象检测。传统上它用于人脸检测,但您可以根据足够的数据对电视进行调整。例如,您可以通过脚本下载带有电视的客厅图像作为您的正面课程,而没有电视的客厅则作为您的负面课程。
http://en.wikipedia.org/wiki/Viola%E2%80%93Jones_object_detection_framework http://docs.opencv.org/trunk/doc/py_tutorials/py_objdetect/py_face_detection/py_face_detection.html
4)
你可以使用互相关进行图像配准,就像这个漂亮的MATLAB示例所示:
对于可以在搜索图像上滑动的模板电视图像,您可以获得一堆电视图片并创建“Eigenscreens”,类似于Eigenfaces用于面部识别并生成平均电视图像:
http://jeremykun.com/2011/07/27/eigenfaces/
5)
看来OpenCV有很多有趣的工具来描述形状和结构特征,这似乎主要是你感兴趣的东西。值得一看,如果你还没有看到这个:
http://docs.opencv.org/modules/imgproc/doc/structural_analysis_and_shape_descriptors.html
祝你好运。