c# winform中 怎么识别图片上不规则的汉字

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了c# winform中 怎么识别图片上不规则的汉字相关的知识,希望对你有一定的参考价值。

sift算法,网上现在有C#版的源码,可以识别模糊的汉字,但是还得配合第三方的文字库才能工作,自己写的话基本上没可能,汉王有款工具可以识别汉字,但是好像抗干扰的能力比较差追问

能不能给个简单的例子!

追答

没有现成的代码。。。

追问

哦,谢啦!

追答

一般验证码中汉字的匹配是比较简单的,直接一个汉字库就能差不多搞定,但是现在很多网站或者是游戏里的验证码是干扰性很大的汉字和字母数字,机器识别的难度很大,非常难,这种难度非常大的算法是一个人很难实现的,必须得有团队去分担这个任务才行,黑客的梦想只能是梦想,电视里的那些大部分都是忽悠人的。

追问

谢谢

参考技术A 你是不是想识别验证码啊?
可以搜索一下OCR,不过这个技术挺难的,不是几十万行代码能实现的,要不然验证码就废了
Office组件里有这个功能,可以体验一下追问

有没有源码,发一下xsong89@qq.com

追答

我要有的话,估计能卖好几百万,呵呵

追问

呵呵,那如果我想要实现一个手写功能怎么实现呢?

参考技术B 这个属于图像识别技术的范围。对于图像识别的方法建议楼主可以去下载一个AForge.NET。
AForge.NET 是一个专门为开发者和研究者基于C#框架设计的,他包括计算机视觉与人工智能,图像处理,神经网络,遗传算法,机器学习,机器人等领域。
之前看到过日本的一个高手用AForge.NET写过一个通过用摄像头来识别用户的动作,从而实现利用摄像头操控来程序。这里面用到的就是图像识别技术。追问

谢谢

参考技术C 图片识别这么复杂的技术,你以为也能在百度知道这样的平台上随便一问就都有了?追问

那有没有第三方控件可以实现这个功能?

参考技术D 我觉得楼上说得有道理。

请问C# winform如何实现将一个不规则形状的图片弄成按键?

编译软件是visual studio,想自己用PS或其它绘图软件画两个不规则图形A与B,然后将这两个不规则图形放到winform里面充当按键,当鼠标离开按键的时候显示图形A,当鼠标悬停或点击的时候显示图形B。请问如何能做到这种效果?

您可以使用自定义控件来实现这种效果。首先,创建一个继承自System.Windows.Forms.Control的类,然后重写其OnPaint方法来绘制不规则形状的图片。然后,通过在控件上附加鼠标事件处理器,来切换显示图形A和图形B。以下是一个简单的代码示例:
using System;
using System.Drawing;
using System.Windows.Forms;

public class IrregularButton : Control

private Image _imageA;
private Image _imageB;

public IrregularButton()

this.BackColor = Color.Transparent;
this.MouseEnter += new EventHandler(IrregularButton_MouseEnter);
this.MouseLeave += new EventHandler(IrregularButton_MouseLeave);
this.MouseDown += new MouseEventHandler(IrregularButton_MouseDown);
this.MouseUp += new MouseEventHandler(IrregularButton_MouseUp);


public Image ImageA

get return _imageA;
set _imageA = value;


public Image ImageB

get return _imageB;
set _imageB = value;


protected override void OnPaint(PaintEventArgs e)

if (_imageA != null)

e.Graphics.DrawImage(_imageA, new Rectangle(0, 0, this.Width, this.Height));



private void IrregularButton_MouseEnter(object sender, EventArgs e)

if (_imageB != null)

this.Invalidate();



private void IrregularButton_MouseLeave(object sender, EventArgs e)

if (_imageA != null)

this.Invalidate();



private void IrregularButton_MouseDown(object sender, MouseEventArgs e)

if (_imageB != null)

this.Invalidate();



private void IrregularButton_MouseUp(object sender, MouseEventArgs e)

if (_imageA != null)

this.Invalidate();




您可以在WinForm窗体中使用这个自定义控件,并设置ImageA和ImageB属性来设置图形A和图形
参考技术A 一看你就不是C++转过来的,最简单的办法是winform按钮设置省flag然后把边设置为0。这种是有缺点的,你按他的时候不怎么生动,要生动点那就给他按钮事件,鼠标enter、leave、mouseup、mousedown、mousemove全部给全,每一个事件按钮的样子要先P好。然后设置按钮弧度。有人说为什么不用图片去处理,你不要自作聪明,图片是要缓冲的,多了你就头痛了。
这样做你会发现每个按钮都要去写,很头痛,那就做成自定义控件。
参考技术B 涉及知识:控件重绘、自定义控件(User Control类继承)
先创建自定义控件,
1、让后将backcolor设置为transparents(透明),
2、再为控件添加Mouse_Enter和Mouse_Leave事件,
3、定义重绘函数,例如RePaint(object sender,PaintEventArgs e)(名字随便起,参数要一样)
4、定义int变量用于指示状态,一个数字表示一个状态,例如0表示普通状态,1表示悬停状态,2表示按下后状态......
3、Mouse_Enter时先修改自定义变量,再执行Validate(RePaint)函数
4、再在重绘函数中画图,如果是提前ps好的,可以直接加载图片绘制
参考技术C 可以使用 Visual Studio 的图形控件将不规则图形 A 和 B 作为图片放到 Winform 控件中,然后使用事件 MouseLeave 和 MouseDown 来设置不同图片的显示效果。代码如下:
Private Sub PictureBox1_MouseLeave(sender As Object, e As EventArgs) Handles PictureBox1.MouseLeave
PictureBox1.Image = Image.FromFile("path-to-image-A")
End Sub
Private Sub PictureBox1_MouseDown(sender As Object, e As MouseEventArgs) Handles PictureBox1.MouseDown
PictureBox1.Image = Image.FromFile("path-to-image-B")
End Sub
参考技术D 这个实现起来比较麻烦。首先做两个透明png图片,然后获取图片的不透明区域的region,然后每隔25ms获取鼠标位置,判断该点是否在region内部,如果是就切换图片并将Enable设为true,离开区域就切换回来。
PS:其他人的方法点击区域是矩形而不是不规则图形。

以上是关于c# winform中 怎么识别图片上不规则的汉字的主要内容,如果未能解决你的问题,请参考以下文章

C# Winform 制作圆润图片效果。

C# winForm怎么把textbox 不可见

请问Winform里面怎么单击按钮来改变窗体背景图片?(C#)

c# winform背景图片超过屏幕分辨率怎么办

c#(winform)combobox手动添加的选项怎么获取value?

C# winform中怎么获取imagelist控件中图片的名字