如何在OpenCV中设置感兴趣区域 - JAVA

时间:2014-11-08 05:22:46

标签: java opencv ocr tesseract

我有一张名片的图像,我已经在其上进行了透视变换,以便仅从图像中提取卡片。现在,我想要将此图像提供给tesseract-ocr引擎。在此之前,我想提取感兴趣的区域,其中包含一些文本和馈送,而不是整个图像。如何从卡中提取文本。

以下是图片示例:enter image description here

1 个答案:

答案 0 :(得分:2)

以下是为您执行此操作的代码。我是通过首先找到图像上可用文本的轮廓然后在实际图像上使用这些轮廓来实现的。

     Mat img_grayROI =  Highgui.imread(perspective__transform_file, Highgui.CV_LOAD_IMAGE_GRAYSCALE);

      Imgproc.GaussianBlur(img_grayROI, img_grayROI, new Size(15,15),50.00);Imgproc.THRESH_BINARY_INV, 15, 4);

      Imgproc.threshold(img_grayROI, img_grayROI, -1, 255, Imgproc.THRESH_BINARY_INV+Imgproc.THRESH_OTSU);

      Imgproc.dilate(img_grayROI, img_grayROI, Imgproc.getStructuringElement(Imgproc.MORPH_RECT, new Size(2, 2)));

      Mat heirarchy= new Mat();
      Point shift=new Point(150,0);

      List<MatOfPoint> contours = new ArrayList<MatOfPoint>();    

        Imgproc.findContours(img_grayROI, contours, heirarchy, Imgproc.RETR_LIST, Imgproc.CHAIN_APPROX_SIMPLE);
        double[] cont_area =new double[contours.size()]; 

      for(int i=0; i< contours.size();i++){
             if (Imgproc.contourArea(contours.get(i)) > 50 ){
                 Rect rect = Imgproc.boundingRect(contours.get(i));
                 cont_area[i]=Imgproc.contourArea(contours.get(i));

                 if (rect.height > 25){
                     Core.rectangle(result, new Point(rect.x,rect.y), new Point(rect.x+rect.width,rect.y+rect.height),new Scalar(0,0,255));


                     System.out.println(rect.x +"-"+ rect.y +"-"+ rect.height+"-"+rect.width);
                     Highgui.imwrite(ROI_file,result);
                 }
             }
        }

perspective_transform是我需要找到投资回报率的源图像。

希望它有所帮助。