360Buy 京东商城商品价格图片识别 火车头采集京东商城图片价格识别

本文介绍了一种通过图像处理和模式识别技术,从图片中自动提取数字串的方法。包括灰度处理、有效区域识别、数字识别等关键步骤,以及如何使用自定义的数字映射表进行数字识别。

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Drawing;
using System.IO;

namespace ConsoleApplication1
{
    class MyImage
    {
        //需要进行分析的图片
        private Bitmap bmpobj;

        //需要继承并且重写的数字比对串,在子类里面需要用到这个去比对数字
        public Dictionary<string, char> numDic = new Dictionary<string, char>();

        //得到图片中某一点的灰度数值
        private int GetGrayNumColor(System.Drawing.Color posClr)
        {
            return (posClr.R * 19595 + posClr.G * 38469 + posClr.B * 7472) >> 16;
        }

        //进行灰度处理
        private void GrayByPixels()
        {
            for (int i = 0; i < bmpobj.Height; i++)
            {
                for (int j = 0; j < bmpobj.Width; j++)
                {
                    int tmpValue = GetGrayNumColor(bmpobj.GetPixel(j, i));
                    bmpobj.SetPixel(j, i, Color.FromArgb(tmpValue, tmpValue, tmpValue));
                }
            }
        }

        //得到一个图片的01代码序列
        private string GetSingleBmpCode(Bitmap singlepic, int dgGrayValue)
        {
            Color piexl;
            string code = "";
            for (int posy = 0; posy < singlepic.Height; posy++)
                for (int posx = 0; posx < singlepic.Width; posx++)
                {
                    piexl = singlepic.GetPixel(posx, posy);
                    if (piexl.R < dgGrayValue)    // Color.Black )
                        code = code + "1";
                    else
                        code = code + "0";
                } return code;
        }

        //从一个图片里面得到几个分开的数字小图片
        private Bitmap[] GetPicValidByValue(int dgGrayValue)
        {
            List<Bitmap> PicList = new List<Bitmap>();
            Rectangle cloneRect;
            int posx1 = bmpobj.Width, posy1 = bmpobj.Height, posx2 = 0, posy2 = 0;
            bool cut = false;
            int last = -1, lastx = 0;
            for (int j = 0; j < bmpobj.Width; j++)      //找有效区
            {
                cut = false;
                for (int i = 0; i < bmpobj.Height; i++)
                {
                    int pixelValue = bmpobj.GetPixel(j, i).R;
                    if (pixelValue < dgGrayValue)     //根据灰度值
                    {
                        if (posx1 > j) posx1 = j;
                        if (posy1 > i) posy1 = i;
                        if (posx2 < j) posx2 = j;
                        if (posy2 < i) posy2 = i;
                        cut = true;
                    }
                };
                if (cut)
                    continue;
                if (last + 1 == j)
                {
                    last++;
                    continue;
                }
                cloneRect = new Rectangle(posx1, posy1, posx2 - posx1 + 1, posy2 - posy1 + 1);
                lastx = j;
                last = j;
                posx1 = bmpobj.Width;
                posy1 = bmpobj.Height;
                posx2 = 0;
                posy2 = 0;
                PicList.Add(bmpobj.Clone(cloneRect, bmpobj.PixelFormat));//复制小块图
            };
            return PicList.ToArray();
        }

        //得到一个图片的数字串
        private string GetPicNumber()
        {
            GrayByPixels(); //灰度处理
            Bitmap[] pics = GetPicValidByValue(128); //得到有效值
            StringBuilder sb = new StringBuilder();
            char c;
            for (int i = 0; i < pics.Length; ++i)
            {
                string code = GetSingleBmpCode(pics[i], 128);   //得到代码串
                if (numDic.TryGetValue(code, out c))
                {
                    sb.Append(c);
                }
            }
            return sb.ToString();
        }

        //外部调用,得到一个图片的数字串
        public string GetPicNum(Bitmap pic)
        {
            bmpobj = new Bitmap(pic);    //转换为Format32bppRgb
            return GetPicNumber();
        }

        //外部调用,得到一个图片的数字串(重载)
        public string GetPicNum(string fileName)
        {
            bmpobj = new Bitmap(fileName);
            return GetPicNumber();
        }

        //输出在一幅图里面找到的数字,测试或者找到数字比对串时用
        private void TestNumber()
        {
            GrayByPixels(); //灰度处理
            Bitmap[] pics = GetPicValidByValue(128); //得到有效值
            for (int i = 0; i < pics.Length; ++i)
            {
                string code = GetSingleBmpCode(pics[i], 128);   //得到代码串
                Console.WriteLine(i); Console.WriteLine(code);
            }
        }

        //外部调用,输出在一幅图里面找到的数字,测试或者找到数字比对串时用
        public void TestNum(Bitmap pic)
        {
            bmpobj = new Bitmap(pic);    //转换为Format32bppRgb
            TestNumber();
        }

        //外部调用,输出在一幅图里面找到的数字,测试或者找到数字比对串时用(重载)
        public void TestNum(string fileName)
        {
            bmpobj = new Bitmap(fileName);
            TestNumber();
        }
    }

    class JingdongImage : MyImage
    {
        public JingdongImage()
        {
            //numDic.Add("111101111011100110001110100001110100000111000000111000001111100000111000000111100", '¥');
            numDic.Add("011110110011110011110011110011110011110011011110", '0');
            numDic.Add("01101110011001100110011001101111", '1');
            numDic.Add("011110110011000011000110001100011000110000111111", '2');
            numDic.Add("011110110011000011001110000011000011110011011110", '3');
            numDic.Add("000010000110001110010110100110111111000110000110", '4');
            numDic.Add("011111011000011000011110000011000011110011011110", '5');
            numDic.Add("001110011000110000111110110011110011110011011110", '6');
            numDic.Add("111111000011000110000110001100001100011000011000", '7');
            numDic.Add("011110110011110011011110110011110011110011011110", '8');
            numDic.Add("011110110011110011110011011111000011000110011100", '9');
            numDic.Add("1111", '.');
        }
    }

    class Program
    {

        static void Main(string[] args)
        {
            DirectoryInfo dInfo = new DirectoryInfo(@"D:/Images");
            JingdongImage test = new JingdongImage();
            foreach (var file in dInfo.GetFiles())
            {
                Console.WriteLine(file.FullName);
                Console.WriteLine(test.GetPicNum(file.FullName));
            }
            Console.ReadLine();
        }
    }
}

潮汐研究作为海洋科学的关键分支,融合了物理海洋学、地理信息系统及水利工程等多领域知识。TMD2.05.zip是一套基于MATLAB环境开发的潮汐专用分析工具集,为科研人员与工程实践者提供系统化的潮汐建模与计算支持。该工具箱通过模块化设计实现了两大核心功能: 在交互界面设计方面,工具箱构建了图形化操作环境,有效降低了非专业用户的操作门槛。通过预设参数输入模块(涵盖地理坐标、时间序列、测站数据等),用户可自主配置模型运行条件。界面集成数据加载、参数调整、可视化呈现及流程控制等标准化组件,将复杂的数值运算过程转化为可交互的操作流程。 在潮汐预测模块中,工具箱整合了谐波分解法与潮流要素解析法等数学模型。这些算法能够解构潮汐观测数据,识别关键影响要素(包括K1、O1、M2等核心分潮),并生成不同时间尺度的潮汐预报。基于这些模型,研究者可精准推算特定海域的潮位变化周期与振幅特征,为海洋工程建设、港湾规划设计及海洋生态研究提供定量依据。 该工具集在实践中的应用方向包括: - **潮汐动力解析**:通过多站点观测数据比对,揭示区域主导潮汐成分的时空分布规律 - **数值模型构建**:基于历史观测序列建立潮汐动力学模型,实现潮汐现象的数字化重构与预测 - **工程影响量化**:在海岸开发项目中评估人工构筑物对自然潮汐节律的扰动效应 - **极端事件模拟**:建立风暴潮与天文潮耦合模型,提升海洋灾害预警的时空精度 工具箱以"TMD"为主程序包,内含完整的函数库与示例脚本。用户部署后可通过MATLAB平台调用相关模块,参照技术文档完成全流程操作。这套工具集将专业计算能力与人性化操作界面有机结合,形成了从数据输入到成果输出的完整研究链条,显著提升了潮汐研究的工程适用性与科研效率。 资源来源于网络分享,仅用于学习交流使用,请勿用于商业,如有侵权请联系我删除!
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值