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();
        }
    }
}

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

  1. 火车头采集器 页面图片等信息采集

    火车头采集器 页面图片等信息采集 有些采集的页面中有图片或者其他内容如链接的word文档等等,如果采集下来,并保持链接呢. 火车头采集器中给了较好的操作. 在内容采集中,选择内容下载,如果仅仅是图片, ...

  2. 火车头图片储存-火车头采集图片储存插件及教程

    火车头图片储存,怎么设置火车头存储第三方平台或者储存本地化? 怎么批量给图片加上水印.今天就教大家怎么配置火车头图片储存只需简单几步,详细如图. 为什么要采集的文章远程图片自动保存到本地服务器,现在很 ...

  3. 火车头采集之采集规则编写

    文章目录[隐藏] 前言 目标网站分析 火车头采集器使用(mip.chiyuba.com 可搜索下载) 总结 前言 上一篇火车头采集系列主要给大家一个引导作用,让大家简单了解火车头采集器有什么功能,从次 ...

  4. 京东商城(360Buy)价格识别 java版

    上一篇介绍到 利用Jsoup抓取各个电商网站的信息 不过有时候会遇到价格是图片的问题 这时候你只能得到一张图片了 如果有个能把图片解析出来那该多爽啊 去百度一搜"京东(360Buy)价格识别 ...

  5. 京东商城商品价格获取方法

    在我看来,现在电子商务市场做得最红火的两个网站,当属于淘宝和京东了,淘宝对我们来说又太杂了,而京东往往是我们最关注的电子商务网站! 在易淘事件过后,京东国美等网购商城的价格往往成为人们非常关注的问题, ...

  6. 火车头采集器采集图片文章详细 教程

    火车头采集器怎么采集带图片文章?首先要更好的使用火车头采集器软件,必须需要有基本的HTML基础,能看得懂网页源码,网页结构. 同时如果用到web发布或数据库发布,则对自己文章系统及数据存储结构要非常了 ...

  7. 京东商品图片要怎么采集?下图高手来教你

    现在开商城的人非常多,很多都是需要在网上采集商品,然后在自己的商城中发布! 如何采集这些商品,其实市场也有很多的软件和插件,但是大多数都只是采集某一种,如果你需要的商品种类比较多,那么就需要多种插件, ...

  8. 火车头采集器文章翻译插件(文章标题内容中英双语对照|自动插入相关图片)

    火车头采集器文章翻译插件(文章标题内容中英双语对照|自动插入相关图片) 为了保护接口压力防止被封IP: 请把采集的间隔时间调整为10000~100000 火车头采集器文章翻译插件(文章标题内容中英双语 ...

  9. 火车头怎么采集图片-火车头采集图片并保存本地化

    火车头怎么采集图片?首先我们一起来了解一下火车头采集器,火车头采集器抓取数据取是决于您的规则.要获取某个网页的所有内容,您需要先获取此网页的网址.程序按规则抓取列表页面,分析其中的URL,然后写规则获 ...

最新文章

  1. 漫话:如何给女朋友解释为什么不能在 MySQL 中使用 UTF-8 编码
  2. python自动化框架pytest接口关联串联_基于python接口自动化框架搭建_pytest+jenkins+allure...
  3. PHP安装memcache扩展
  4. 重磅推荐!大咖解读,重新定义 B2B 获客转化,引爆企业营销
  5. 何将ext中的FormPanel中,所有组件都居中放置?
  6. mysql中 !40000 DROP DATABASE IF EXISTS `top_server` 这中注释有什么作用?
  7. 用gdb搞清楚一道union相关的面试题
  8. python语言format用法_python格式化输出之format用法
  9. 输出三角形面积和周长 (15 分)
  10. sonar+Jenkins 构建代码质量自动化分析平台
  11. pyinstaller 用法
  12. 提高短线操作成功率的诀窍!
  13. Error 1606 Could Not Access Network Location %SystemDrive%/inetpub/wwwroot/ 的错误解决方法
  14. Exposure X8标准版图片后期滤镜PS、LR等软件的插件
  15. 从数据分析角度谈谈谁才是这个夏天的无价之姐——基于弹幕文本分析
  16. keras非线性回归代码专题
  17. 工欲善其事 必先利其器-——Idea使用(1)-初次识别
  18. 我来回答,害怕别人赚钱到底是一种什么样的心理
  19. 与太阳神对话——j2se之旅
  20. STM32之温湿度DHT11驱动

热门文章

  1. 这篇文章几乎回答了你对量化对冲的所有疑问
  2. IT程序员的常见病:颈椎病、肩周炎 .
  3. NLTK词性pos_tag的含义
  4. 李善友:中国可以活3年以上的企业不到10%
  5. 你的网站安全吗?ZAP应用实例
  6. 2021高考成绩查询衢州,2021浙江衢州中考成绩查询时间 衢州中考成绩查询入口
  7. Excel T检验双样本等方差分析
  8. at com.android.xiong.aysnctasktest.MainActivity$PageTask.onPostExecute(MainActivity.java:116)
  9. P3084 [USACO13OPEN]照片Photo(差分约束)
  10. 永远做一个有计划的人