我能做些什么来消除图像的"反射光"?使用 OpenCV



我的图像有一个"光反射",图像上的前两个零与图像的其余部分有一些光不同。当我把它转换成二值图像时,这部分变成了白色,我需要得到数字的精确轮廓,这就阻碍了。我如何通过使用OpenCV来解决这个问题?

原图片https://docs.google.com/file/d/0BzUNc6BOkYrNNlE3U04wWEVvVE0/edit?usp=sharing

二进制版本https://docs.google.com/file/d/0BzUNc6BOkYrNeEE0U3NvOElqa1E/edit?usp=sharing

如果我增加阈值,我将失去图像右侧的数字。我的代码:

#include <opencv2/imgproc/imgproc.hpp>
#include <opencv2/highgui/highgui.hpp>
using namespace cv;
int main ( int argc, char **argv )
{
   Mat im_gray = imread("img2.jpg",CV_LOAD_IMAGE_GRAYSCALE);
   Mat im_rgb  = imread("img2.jpg");
   cvtColor(im_rgb,im_gray,CV_RGB2GRAY);
   Mat img_bw = im_gray > 90;
   imwrite("image_bw2.jpg", img_bw);
   return 0;
}  

阴影和眩光不是容易处理的问题。但是只要做一些好的工作,它们是可以克服的。

另一个步骤是使用阈值图像作为蒙版来获得另一个阈值图像。以下是一些对我有用的标准:

  • 限制中间(你现在拥有的)阈值图像直方图中包含的像素中除主导峰外的所有像素
  • 使用导数找到边界(cvSobel可能有帮助)
  • 使用严格自适应和自由硬阈值的组合来考虑图像不同部分的不同照明

其实你的情况并没有那么难。因为你只有10个不同的数字,训练一些分类器来识别它们。

对于快速开始,您可以使用http://blog.damiles.com/2008/11/basic-ocr-in-opencv.html

它会起作用,因为缺陷也会在某种程度上重复。您可以训练算法来识别有缺陷的图像,而忘记删除它们。

最新更新