我正在使用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;
错误的结果是它没有找到blured文本 - 右上角区域或左下角的数字“195”,例如“14毫秒”和/或“19毫秒”。 相反,它找到了最好的结果,这不是我想要的。
我相信如果我可以使用某种能够模糊锐利区域和锐化区域的内核,那么Shi-Tomasi角点探测器可能会找到结果。
有关如何达成目标的任何提示?
答案 0 :(得分:0)
我可以想到一个小小的想法,但它可能会耗尽性能。
按窗口迭代图像窗口(3 * 3或更大以获得更好的性能)并在每次迭代中执行:
cv::Norm
。将此值存储在每个窗口的某个位置。这些值具有以下属性:
现在浏览这些值并找到符合条件的值。