我正在使用 OpenCV 3.1 和 Visual Studio C++。
目标
我想检测角点,而不是曲线、矩形或圆形。这意味着,我想找到模糊字符的位置。这里是我感兴趣的领域:
红色区域具有更高的优先级,因为它们比当前 Shi-Tomasi 角检测器可以检测到的橙色区域更模糊。
我尝试过的
我测试了 Shi-Tomasi 角点检测器 - 代码放在本教程中 http://docs.opencv.org/2.4/doc/tutorials/features2d/trackingmotion/good_features_to_track/good_features_to_track.html当您有清晰的图像时,这非常适合定位带有文本的区域。我想找到使用 OpenCV 的算法,它具有相似(非常好的)性能并且可以检测模糊文本。文本过于模糊的区域(无法阅读 - 检测角落)应该被忽略。也应该忽略具有良好清晰度的区域。
这是我尝试过的示例 - 这是 Shi-Tomasi 教程的结果:
这是源图像:
这就是我得到的
上图参数 minDistance=5, qualityLevel=0.01,下图 minDistance=10, qualityLevel=0.05 两张图的其余参数相同:
int blockSize = 3; bool useHarrisDetector = false; double k = 0.04;
错误的结果是它没有找到模糊文本 - 右上角或左下角的数字“195”,例如“14 毫秒”和/或“19 毫秒”。 相反,它找到了最好的锐利结果,这不是我想要的。
我相信,如果我可以使用某种内核来模糊锐利区域并锐化模糊区域,也许 Shi-Tomasi 角检测器可以找到结果。
有什么实现目标的技巧吗?
最佳答案
我能想到一些小点子,但它可能会耗尽性能。
逐个窗口(3*3 或更大以获得更好的性能)遍历您的图像窗口,并在每次迭代中执行:
- 模糊这个窗口。
- 计算模糊前后窗口之间的
cv::Norm
。将此值存储在每个窗口的某个位置。
这些值具有以下属性:
- 当模糊度高时它们就低。
- 当模糊度较低时它们较高
现在浏览这些值并找到符合您标准的值。
关于OpenCV "Blured Corners"检测器 (C++),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37895777/