调用微软MODI进行OCR图片文字识别问题

cjwlz 2012-08-26 11:25:19
现在我可以进行OCR图片文字识别了,但是有一个问题:当我选择的识别区域较小时(经测试识别区域内少于8个汉字或数字时),将不能进行识别了,我想要的效果是:即便选择一个汉字或数字也可以进行识别。求代码~
附上我的关键代码:
                //创建一个临时文件
string strFileName =string.Format("{0:yyyy_MM_dd_HH_mm_ss_ffff}", DateTime.Now) + ".tif";
try
{
//位图对象保存到一个TIFF文件
Console.WriteLine(m_obj.PixelFormat.ToString());
m_obj.Save(strFileName, ImageFormat.Tiff);
m_obj.Dispose();

//实例化MODI.Document对象
MODI.Document md = new MODI.Document();
md.Create(strFileName);

//运行OCR
md.OCR(MODI.MiLANGUAGES.miLANG_CHINESE_SIMPLIFIED, true, true); //定义要识别的语言种类
//这个字符串将包含文本
string strText = String.Empty;

//获得第一个图片
MODI.Image image = (MODI.Image)md.Images[0];
//获取布局
MODI.Layout layout = image.Layout;

//遍历文字
for (int j = 0; j < layout.Words.Count; j++)
{
//得到文字
MODI.Word word = (MODI.Word)layout.Words[j];
// 添加一个空格来分隔文字
if (strText.Length > 0)
{
strText += " ";
}
//添加文字
strText += word.Text;
}
//关闭MODI.Document对象
md.Close(false);

//创建对话框显示文本的文本识别
ShowText st = new ShowText();
//该对话框的文本
st.m_strOCRText = strText;
//显示的对话框
st.ShowDialog();
}
catch (Exception)
{
MessageBox.Show("识别区域不低于9个字符!", "提示"); //我要的是即便一个字符也可以识别
}
try
{
//删除临时文件
File.Delete(strFileName);
}
catch{ }
...全文
844 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
十七郎 2013-10-16
  • 打赏
  • 举报
回复
我也遇到了相同问题,求解
拉拉123 2013-04-18
  • 打赏
  • 举报
回复
你好,我毕业设计刚好做的也是利用MODI来进行图像文字识别,但是我用的是C++,用VS2010进行开发。请问在我进行开发之前,是否需要进行一些控件之类的设置。
cjwlz 2012-08-28
  • 打赏
  • 举报
回复
高手啊 求解啊 指点迷津吧
cjwlz 2012-08-28
  • 打赏
  • 举报
回复
求解啊 高手啊 指点迷津吧
wy811007 2012-08-27
  • 打赏
  • 举报
回复
那个是国际时差吧 应该和程序设定的默认国际时间有关
不行你就给时间加八小时 再计算呗
cjwlz 2012-08-27
  • 打赏
  • 举报
回复
这么久了 咋还没人回呢 高手啊 出现吧~说一下我的思路:就是当我要识别的字数少于8个时(假如我现在选中的识别字数是4个吧),先对这几个字做复制,这样字数就八个了,可以去识别了,最后再对识别出来的字做处理,去掉刚才复制的那些,复制几次就去掉几次。求教~!
cjwlz 2012-08-27
  • 打赏
  • 举报
回复
但是我现在的问题就是那样啊,必须字数大于某个值或者截取区域大于某个值时才能识别出来。继续求解 [Quote=引用 4 楼 的回复:]

这个根本不存在识别个数的限制
后台绘制个矩形,为识别指定区域即可
这样即使是个半个汉字也能识别
[/Quote]
q107770540 2012-08-27
  • 打赏
  • 举报
回复
这个根本不存在识别个数的限制
后台绘制个矩形,为识别指定区域即可
这样即使是个半个汉字也能识别
cjwlz 2012-08-27
  • 打赏
  • 举报
回复
不是这个原因。说一下我的思路:就是当我要识别的字数少于8个时(假如我现在选中的识别字数是4个吧),先对这几个字做复制,这样字数就八个了,可以去识别了,最后再对识别出来的字做处理,去掉刚才复制的那些,复制几次就去掉几次。求教~! 希望还有更好的方法啊 [Quote=引用 2 楼 的回复:]

那个是国际时差吧 应该和程序设定的默认国际时间有关
不行你就给时间加八小时 再计算呗
[/Quote]

110,526

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧