带有PHP的OpenCV-识别文本
OpenCV with PHP - recognize 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;
}
您可以看到GPPK注释。它应该对你有用。然而,如果您需要一些快速的方法,而不需要那么多额外的库和包装器。只需将c++代码编译到一个可执行文件(如exe或平台中的任何文件)中,并设置一个参数可能性(将图像路径作为参数传递)。然后,我认为您可以从PHP代码中调用它。据我所知,PHP是服务器端的,所以它应该是一项简单的任务。但是,您可以请求您的托管服务或服务器管理员的许可,以允许您在服务器上运行exe文件。
相关文章:
- 已解决 - C++ 的崇高文本中的"fatal error: opencv: no such file or directory"
- 使用 Opencv 将姿势值实时写入文本文件
- C++宏:如何在可识别的字符串文本之前捕获所有内容
- 在我的类中无法识别用户定义的文本运算符
- 什么是用面部识别器opencv训练面孔以获得最佳效果的最佳方法
- OPENCV错误在XCode 8中加载Fisher面部识别器时
- OpenCV SVM 分类器图像识别
- OpenCV程序的输出在未检测到文本对象时不给出0
- 使用OpenCV检测图像中垂直文本的方法
- 为什么此代码只能识别文本文件中的第一行?输入任何大于 1 的数字都会返回"Atomic Number Not Found"
- 如何将文本放在OpenCV C 中的图像中
- 面部识别OPENCV置信度负值
- OpenCV 3的面部识别
- OpenCV 用于识别训练视频集中的对象,然后针对另一个视频对其进行测试
- OpenCV 错误 5772.人脸识别
- 我在哪里可以找到完整的img包,用于训练opencv人脸识别系统?
- 人脸识别器OpenCV
- 带有PHP的OpenCV-识别文本
- OpenCV 3.1 + tesseract 3.04的OCR(文本识别)结果根据识别的顺序而变化
- 在c++中读文件函数如何识别文本文件的结束