gpt4 book ai didi

c++ - 如何使用 OpenCV 或其他库从图像中检测电视屏幕?

转载 作者:太空狗 更新时间:2023-10-29 20:59:34 25 4
gpt4 key购买 nike

我已经为此工作了一段时间,但找不到合适的解决方案。

我使用 OpenCV 进行图像处理,我的工作流程是这样的:

  1. 拍了一张电视照片。
  2. 将图像拆分为 R、G、B 平面 - 我也开始使用 H、S、V 进行测试,看起来很有希望。
  3. 对于每个平面,阈值图像的范围值在 0 到 255 之间
  4. 减少噪声,用 canny 检测边缘,找到轮廓并对其进行近似。
  5. 选择包含图像中心的轮廓(我可以假设图像的中心在电视屏幕内)
  6. 使用 convexHull 和 HougLines 过滤和细化无效轮廓。
  7. 选择具有特定区域的轮廓(区域在图像的 10%-90% 之间)。
  8. 只保留只有 4 个点的轮廓。

但这太慢了(在每个 channel (RGB) 上循环,然后循环阈值,等等...)并且不够好,因为它无法检测到很多电视。

我的基本代码是 OpenCV 框架的 squares.cpp 示例。

电视屏幕检测的主要问题是:

  1. 图像半暗半亮或屏幕上有许多暗/亮项目。
  2. 屏幕上与电视框架颜色相同的元素。
  3. 电视边缘模糊(在某些情况下)。

我也搜索了很多关于矩形检测的 SO 问题/答案,但都是关于检测深色背景上的白色页面或对比背景上的固定颜色对象。

我的最终目标是在 Android/iOS 上实现此功能以实现近乎实时的电视屏幕检测。我的代码在 Galaxy Nexus 上最多需要 4 秒。

希望有人能提供帮助。提前致谢!

更新 1: 仅使用 canny 和 houghlines 是行不通的,因为可能有很多行,选择正确的行可能非常困难。我认为应该首先对图像进行某种“清理”。

更新 2:这 question是最接近问题的一种,但是对于电视屏幕,它没有用。

最佳答案

希望这些观点能提供一些见解:

1)

如果您可以通过前景和背景正确分割图像,那么您可以轻松地在前景周围设置一个边界框。图割是一种非常强大的图像分割方法。 OpenCV 似乎为其提供了易于使用的实现。因此,例如,您提供了一些覆盖“前景”和“背景”像素的画笔笔触,并且您的图像被转换为​​经过最佳切片以将两者分开的二合字母。这是一个有趣的例子:

http://docs.opencv.org/trunk/doc/py_tutorials/py_imgproc/py_grabcut/py_grabcut.html

这是我为了说明其有效性而快速整理的内容: Example of what this library can do

2)

如果您决定继续沿着边缘检测路线前进,那么请考虑使用数学形态学来“清理”您检测到的线条,然后再尝试在对象周围设置边界框或轮廓。

http://en.wikipedia.org/wiki/Mathematical_morphology

3)

您可以训练包含电视的数据集,并使用 viola jones 算法进行对象检测。传统上它用于人脸检测,但您可以在提供足够数据的情况下将其用于电视。例如,您可以将带电视的起居室的图像下载脚本作为正类,将没有电视的起居室作为负类。

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 示例演示的那样:

http://www.mathworks.com/help/images/examples/registering-an-image-using-normalized-cross-correlation.html

至于将滑过搜索图像的模板电 View 像,您可以获得一堆电 View 片并创建“特征屏幕”,类似于使用特征脸进行面部识别并生成平均电 View 像的方式:

http://jeremykun.com/2011/07/27/eigenfaces/

5)

看来 OpenCV 有很多有趣的工具来描述形状和结构特征,这似乎主要是您感兴趣的。如果您还没有看到这个,值得一看:

http://docs.opencv.org/modules/imgproc/doc/structural_analysis_and_shape_descriptors.html

祝你好运。

关于c++ - 如何使用 OpenCV 或其他库从图像中检测电视屏幕?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24363933/

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