我为iOS写了一个数字OCR。我有一个测试图像png与两位数5和4。我找到轮廓了。我如何在Tesseract转乘等高线?
初始化tesseract:
tess = new tesseract::TessBaseAPI();
tess->Init([dataPath cStringUsingEncoding:NSUTF8StringEncoding], "eng");
tess->SetPageSegMode(tesseract::PSM_SINGLE_CHAR); //<-- !!!!
tess->tesseract::TessBaseAPI::SetVariable("tessedit_char_whitelist", "0123456789");
用于检测轮廓的函数:
- (std::vector<std::vector<cv::Point> >)findSquaresInImage:(cv::Mat)_image {
std::vector<std::vector<cv::Point> > squares;
cv::Mat pyr, timg, gray0(_image.size(), CV_8U), gray;
int thresh = 50, N = 11;
cv::pyrDown(_image, pyr, cv::Size(_image.cols/2, _image.rows/2));
cv::pyrUp(pyr, timg, _image.size());
std::vector<std::vector<cv::Point> > contours;
int ch[] = {0, 0};
mixChannels(&timg, 1, &gray0, 1, ch, 1);
for( int l = 0; l < N; l++ ) {
if( l == 0 ) {
cv::Canny(gray0, gray, 0, thresh, 5);
cv::dilate(gray, gray, cv::Mat(), cv::Point(-1,-1));
}
else {
gray = gray0 >= (l+1)*255/N;
}
cv::findContours(gray, contours, CV_RETR_EXTERNAL, CV_CHAIN_APPROX_SIMPLE);
std::vector<cv::Point> approx;
CvRect rec1;
std::string str;
std::map<int,IplImage*> pic_list;
for( size_t i = 0; i < contours.size(); i++ )
{
rec1 = cv::boundingRect(contours[i]);
if (rec1.height > 0.5*gray.rows && rec1.width < 0.756*gray.cols) {
NSLog(@"%d %d %d %d", rec1.width, rec1.height, rec1.x, rec1.y);
cv::approxPolyDP(cv::Mat(contours[i]), approx, arcLength(cv::Mat(contours[i]), true)*0.02, true);
squares.push_back(approx);
}
}
}
return squares; }
cv::Mat debugSquares( std::vector<std::vector<cv::Point> > squares, cv::Mat image ) {
for ( int i = 0; i< squares.size(); i++ ) {
// draw contour
cv::drawContours(image, squares, i, cv::Scalar(255,0,0), 1, 8, std::vector<cv::Vec4i>(), 0, cv::Point());
// draw bounding rect
cv::Rect rect = boundingRect(cv::Mat(squares[i]));
cv::rectangle(image, rect.tl(), rect.br(), cv::Scalar(0,255,0), 2, 8, 0);
// draw rotated rect
cv::RotatedRect minRect = minAreaRect(cv::Mat(squares[i]));
cv::Point2f rect_points[4];
minRect.points( rect_points );
for ( int j = 0; j < 4; j++ ) {
cv::line( image, rect_points[j], rect_points[(j+1)%4], cv::Scalar(0,0,255), 1, 8 ); // blue
}
}
return image;
}
- (IBAction)onMath:(id)sender {
UIImage *image = [UIImage imageNamed:@"test1.png"];
cv::Mat iMat = [self cvMatFromUIImage:image];
std::vector<std::vector<cv::Point> > sq = [self findSquaresInImage:iMat];
cv::Mat hui = debugSquares(sq, iMat);
image = [self UIImageFromCVMat:hui];
self.imView.image = image;
}
GitHub项目链接:https://github.com/maxpatsy/iorc
你能在这里查一下这个答案吗
我在这里描述了为Tesseract准备图像的一些技巧:使用Tesseract识别车牌
在你的例子中,有几件事正在发生...
Native.js for iOS封装一条通过JS语法直接调用Native Objective-C接口通道,通过plus.ios可调用几乎所有的系统API。 方法: importClass: 导入Objective-C类对象 newObject: 创建实例对象 deleteObject: 销毁实例对象 invoke: 调用对象(类对象/示例对象)的方法 implements: 实现代理的方法 cu
iOS 是由苹果公司为 iPhone 开发的操作系统。它主要是给iPhone、iPod touch、iPad 以及 Apple TV 使用。就像其基于的 Mac OS X 操作系统一样,它也是以 Darwin 为基础的。原本這個系统名为 iPhone OS,直到 2010 年 6 月 7 日 WWDC 大會上宣布改名为 iOS。 iOS 的系统架构分为四個层次:核心操作系统层(the Core O
Native 对外接口 注册 SDK 默认的 Module、Handler 和 Component 注册自定义 module、Handler 和 Component 重置 JSFramework Handler (对应于 Android 的 Adapter) 介绍 WXImgLoaderDefaultImpl 图片下载 handler。Weex 会把需要设置图片的 View 和 URL 透露出来,
概述 一 SDK导入及Xcode配置 二 标准接口快速集成 三 扩展功能 四 基本的事件监听 五 设置加密方式 六 语音识别功能 七 推送集成 八 版本更新说明 九 常见错误码 十 SDK下载
这里介绍 FinClip 小程序 SDK 提供了哪些能力,以及API的详细说明和使用示例。 1. 基础API 1.1 SDK初始化 在使用小程序的API之前,需要先初始化小程序SDK。只有成功初始化之后,才能使用SDK提供的API,否则 API都无法调用。 初始化SDK的API如下: /// 初始化SDK /// @param config 配置对象 /// @param error 初始化失败时
iOS Objective-C SDK iOS Swift SDK