最近要写一个条形码识别的程序,在CodeProject上得到一些代码能够识别基本的Code39码,但是它需要二值化的黑白图像,而由于其他原因,我们的原图只能是彩色或者是灰度图,所以需要一个转换。
二值化有很多算法,我没有去研究。步骤如下:
1. 首先灰度化,简单把三色相加除以3
2. 二值化,将一个点周围8个点全部相加,除以9 ,然后根据一个阀值决定是黑还是白,我用160
3. 一定要用LockBit,直接处理图像数据,速度才能快
代码如下:
int n = 3;
/// <summary>
/// 转化普通图像到2值图像
/// </summary>
/// <param name="bmp"></param>
/// <returns></returns>
Bitmap ConvertImageTo2Value(Bitmap bmp)
{
int w = bmp.Width;
int h = bmp.Height;
BitmapData data = bmp.LockBits(new Rectangle(0, 0, w, h),
ImageLockMode.ReadOnly, PixelFormat.Format24bppRgb);
unsafe
{
// 将原始