2015-12-09 64 views
-4

我需要識別圖像中的文本,然後裁剪出矩形文本縮小圖像尺寸OpenCV的用PHP - 文字識別

的第一步是認識到文本,我已經找到了解決辦法在這裏

Extracting text OpenCV

但如何編譯和運行PHP呢?我不熟悉C

如何編譯代碼,以便您可以將參數傳遞給程序像exec('opencv_test input.jpg output.jpg')

而是繪製矩形圍繞每一個文本塊中的程序應該分析所有文本塊,並獲得兩個座標在圖像應該被裁剪..然後裁剪圖像的輸出文件寫入到輸出目的地

代碼

#include "stdafx.h" 

#include <opencv2/core/core.hpp> 
#include <opencv2/highgui/highgui.hpp> 
#include <opencv2/imgproc/imgproc.hpp> 
#include <iostream> 

using namespace cv; 
using namespace std; 

#define INPUT_FILE    "1.jpg" 
#define OUTPUT_FOLDER_PATH  string("") 

int _tmain(int argc, _TCHAR* argv[]) 
{ 
    Mat large = imread(INPUT_FILE); 
    Mat rgb; 
    // downsample and use it for processing 
    pyrDown(large, rgb); 
    Mat small; 
    cvtColor(rgb, small, CV_BGR2GRAY); 
    // morphological gradient 
    Mat grad; 
    Mat morphKernel = getStructuringElement(MORPH_ELLIPSE, Size(3, 3)); 
    morphologyEx(small, grad, MORPH_GRADIENT, morphKernel); 
    // binarize 
    Mat bw; 
    threshold(grad, bw, 0.0, 255.0, THRESH_BINARY | THRESH_OTSU); 
    // connect horizontally oriented regions 
    Mat connected; 
    morphKernel = getStructuringElement(MORPH_RECT, Size(9, 1)); 
    morphologyEx(bw, connected, MORPH_CLOSE, morphKernel); 
    // find contours 
    Mat mask = Mat::zeros(bw.size(), CV_8UC1); 
    vector<vector<Point>> contours; 
    vector<Vec4i> hierarchy; 
    findContours(connected, contours, hierarchy, CV_RETR_CCOMP, CV_CHAIN_APPROX_SIMPLE, Point(0, 0)); 
    // filter contours 
    for(int idx = 0; idx >= 0; idx = hierarchy[idx][0]) 
    { 
     Rect rect = boundingRect(contours[idx]); 
     Mat maskROI(mask, rect); 
     maskROI = Scalar(0, 0, 0); 
     // fill the contour 
     drawContours(mask, contours, idx, Scalar(255, 255, 255), CV_FILLED); 
     // ratio of non-zero pixels in the filled region 
     double r = (double)countNonZero(maskROI)/(rect.width*rect.height); 

     if (r > .45 /* assume at least 45% of the area is filled if it contains text */ 
      && 
      (rect.height > 8 && rect.width > 8) /* constraints on region size */ 
      /* these two conditions alone are not very robust. better to use something 
      like the number of significant peaks in a horizontal projection as a third condition */ 
      ) 
     { 
      rectangle(rgb, rect, Scalar(0, 255, 0), 2); 
     } 
    } 
    imwrite(OUTPUT_FOLDER_PATH + string("rgb.jpg"), rgb); 

    return 0; 
} 
+0

你需要編寫自己的包裝。 http://www.xarg.org/project/php-facedetect/ – GPPK

+0

我感到驚訝與5 downvotes!問題並不壞,並要求如何從PHP調用C++代碼! –

+1

@HumamHelfawi,那是每日生活在stackoverflow – clarkk

回答

0

你可以看到GPPK評論。它應該適合你。但是,如果你需要一些快速的方式,而沒有太多額外的庫和包裝。只需將你的C++代碼編譯成一個可執行文件(比如exe或者你的平臺上的任何文件)並且放置一個參數可能性(將圖像路徑作爲參數傳遞)。然後,我認爲你可以從你的PHP代碼中調用它。據我所知PHP是服務器端,所以它應該是一件容易的事情。但是,您可能會要求您的託管服務或服務器管理員的權限,以使您可以在服務器上運行exe文件。

+0

好吧,但你如何編譯代碼? :) – clarkk

+0

由您的平臺的任何C++編譯器。告訴任何C++開發人員你在哪裏工作,他會在5分鐘內爲你做 –