最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

C#使用ZBar實現(xiàn)識別條形碼

 更新時間:2023年07月24日 08:17:47   作者:2206  
目前主流的識別庫主要有ZXing.NET和ZBar,本文主要介紹的是如何使用ZBar庫實現(xiàn)識別條形碼功能,文中的示例代碼講解詳細,感興趣的小伙伴可以了解一下

一.識別庫

目前主流的識別庫主要有ZXing.NET和ZBar,這里我使用的是ZBar,ZXing.NET也試過,同等條件下,識別率不高。

ZBar相關類庫包括:libzbar.dll,libzbar-cil.dll,libiconv-2.dll;

很奇怪為什么不能直接引用libzbar.dll,實際使用時引用的是libzbar-cil.dll,libiconv-2.dll是libzbar-cil.dll用來映射libzbar.dll的。

二.從一張圖片中提取多個條形碼

先上截圖:

需要提取條形碼的圖片:

識別結果

三.主要代碼

/// <summary>
        /// 條碼識別
        /// </summary>
        private void ScanBarCode(string fileName)
        {
            DateTime now = DateTime.Now;
            Image primaryImage = Image.FromFile(fileName);
            Bitmap pImg = MakeGrayscale3((Bitmap)primaryImage);
            using (ZBar.ImageScanner scanner = new ZBar.ImageScanner())
            {
                scanner.SetConfiguration(ZBar.SymbolType.None, ZBar.Config.Enable, 0);
                scanner.SetConfiguration(ZBar.SymbolType.CODE39, ZBar.Config.Enable, 1);
                scanner.SetConfiguration(ZBar.SymbolType.CODE128, ZBar.Config.Enable, 1);
                List<ZBar.Symbol> symbols = new List<ZBar.Symbol>();
                symbols = scanner.Scan((Image)pImg);
                if (symbols != null && symbols.Count > 0)
                {
                    string result = string.Empty;
                    symbols.ForEach(s => result += "條碼內容:" + s.Data + " 條碼質量:" + s.Quality + Environment.NewLine);
                    MessageBox.Show(result);
                }
            }
        }
        /// <summary>
        /// 處理圖片灰度
        /// </summary>
        /// <param name="original"></param>
        /// <returns></returns>
        public static Bitmap MakeGrayscale3(Bitmap original)
        {
            //create a blank bitmap the same size as original
            Bitmap newBitmap = new Bitmap(original.Width, original.Height);
            //get a graphics object from the new image
            Graphics g = Graphics.FromImage(newBitmap);
            //create the grayscale ColorMatrix
            System.Drawing.Imaging.ColorMatrix colorMatrix = new System.Drawing.Imaging.ColorMatrix(
               new float[][]
              {
                 new float[] {.3f, .3f, .3f, 0, 0},
                 new float[] {.59f, .59f, .59f, 0, 0},
                 new float[] {.11f, .11f, .11f, 0, 0},
                 new float[] {0, 0, 0, 1, 0},
                 new float[] {0, 0, 0, 0, 1}
              });
            //create some image attributes
            ImageAttributes attributes = new ImageAttributes();
            //set the color matrix attribute
            attributes.SetColorMatrix(colorMatrix);
            //draw the original image on the new image
            //using the grayscale color matrix
            g.DrawImage(original, new Rectangle(0, 0, original.Width, original.Height),
               0, 0, original.Width, original.Height, GraphicsUnit.Pixel, attributes);
            //dispose the Graphics object
            g.Dispose();
            return newBitmap;
        }

四.注意事項

如果條碼識別率不高,考慮是圖片的DPI不夠。我的項目初期使用的是500萬像素的高拍儀,拍出來的圖片識別率始終不高,DPI為96。后來更換為800萬像素的高拍儀,DPI為120,識別率從60%直接上升到95%+。當然,也需要對圖片做一些裁剪。另外,灰度處理是必須的,可減少拍攝照片時反光引起的識別率不高問題。

到此這篇關于C#使用ZBar實現(xiàn)識別條形碼的文章就介紹到這了,更多相關C# ZBar識別條形碼內容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!

相關文章

  • C#使用Spire.Doc實現(xiàn)Word轉換為TIFF的代碼示例

    C#使用Spire.Doc實現(xiàn)Word轉換為TIFF的代碼示例

    在需要將Word文檔高質量轉換為圖像格式的場景中(如生成文檔預覽或歸檔),TIFF是理想選擇,使用Spire.Doc for .NET,開發(fā)者只需幾行C#代碼即可實現(xiàn)批量轉換,文中有詳細的代碼示例供大家參考,需要的朋友可以參考下
    2025-08-08
  • 淺談C#中堆和棧的區(qū)別(附上圖解)

    淺談C#中堆和棧的區(qū)別(附上圖解)

    C#中棧是編譯期間就分配好的內存空間,因此你的代碼中必須就棧的大小有明確的定義;堆是程序運行期間動態(tài)分配的內存空間,你可以根據程序的運行情況確定要分配的堆內存的大小
    2014-09-09
  • C# 實例化接口對象的方法

    C# 實例化接口對象的方法

    下面小編就為大家?guī)硪黄狢# 實例化接口對象的方法。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2017-02-02
  • C#3.0使用EventLog類寫Windows事件日志的方法

    C#3.0使用EventLog類寫Windows事件日志的方法

    這篇文章主要介紹了C#3.0使用EventLog類寫Windows事件日志的方法,以簡單實例形式分析了C#寫windows事件日志的技巧,具有一定參考借鑒價值,需要的朋友可以參考下
    2015-08-08
  • C#實現(xiàn)根據指定容器和控件名字獲得控件的方法

    C#實現(xiàn)根據指定容器和控件名字獲得控件的方法

    這篇文章主要介紹了C#實現(xiàn)根據指定容器和控件名字獲得控件的方法,其中包括了遍歷與遞歸的應用,需要的朋友可以參考下
    2014-08-08
  • C#之System.Threading.Lock與lock使用及區(qū)別

    C#之System.Threading.Lock與lock使用及區(qū)別

    本文詳細比較了C#中傳統(tǒng)lock語句與System.Threading.Lock的異同,涵蓋語法復雜度、異常處理、超時控制及性能影響等方面,幫助開發(fā)者選擇合適的同步機制
    2026-05-05
  • c#制作屏幕保護程序步驟(字幕屏保)

    c#制作屏幕保護程序步驟(字幕屏保)

    本文介紹使用C#制作屏幕保護的方法,這個屏幕保護就是仿效視窗系統(tǒng)自帶的字幕屏保。下面是用C#如何編寫屏幕保護的整個過程
    2014-01-01
  • 最新評論

    安吉县| 桂东县| 延津县| 道真| 连州市| 武义县| 江孜县| 绵阳市| 泰安市| 秀山| 运城市| 监利县| 天长市| 宁南县| 英吉沙县| 澄城县| 海城市| 新余市| 临澧县| 雅江县| 喀喇| 石林| 深泽县| 囊谦县| 蓝田县| 滦南县| 镇坪县| 宁南县| 米易县| 东方市| 贵南县| 长宁县| 韶关市| 化州市| 嵊泗县| 都安| 比如县| 收藏| 罗甸县| 嘉祥县| 乌苏市|