Click here to Skip to main content
15,881,882 members
Articles / Programming Languages / C#

Reading Barcodes from an Image

Rate me:
Please Sign up or sign in to vote.
4.49/5 (33 votes)
24 Mar 2004CPOL2 min read 209.3K   11.9K   144   23
An example of how to process an image for barcode strings

Image 1

Introduction

I recently ran across Neil Van Eps series of articles on how to draw barcodes and found myself wondering how easy it would be to process an image to read barcodes. Attached is a demo project that shows one method for reading Code39.

Background

I've been a Basic programmer since age 8 (love those GOTO's... Icky!), a VB4->VB6 programmer for ages (OK... Only since college), and a VB.NET programmer since it was released, but exclusively .NET for only about a year. Basically (sorry for the pun), I've been able to get by with very little knowledge of C or C++. I recently needed to do some image processing so I checked out The Code Project and found a series of articles titled Image Processing for Dummies with C# and GDI+ by Christian Graus. YES! I had finally found what I was looking for, an example on image processing. I started to translate the C# code to VB.NET (usually this is an easy task) and found it nearly impossible... Needless to say, I am now a C# developer as well. :)

Using the code

Although there are at least ten ways (that I can think of) to skin a cat, I selected a method for processing the image that was relatively simple just to prove the concept. First, I create an average of the pixels (histogram) down the image:

C#
for(int y=0;y<bmp.Height;++y)
{
 for(int x=0; x < bmp.Width; ++x )
 {
// Add up all the pixel values vertically (average the R,G,B channels)
  vertSum[x] += ((p[0] + (p+1)[0] + (p+2)[0])/3);

  p+=3;
 }
 p += nOffset;
}
Next run through the resulting array to find the narrow and wide bars:
C#
for(int i = 0; i < vertHist.histogram.Length; ++i)
{
 ...
}
Finally, lookup the narrow/wide bar pattern to match it to a character:
C#
dataString += parsePattern(new string(pattern));

TODO

The method I used to get the bar pattern isn't what I would call robust. I'd eventually like to figure out a better method for finding the barcode patterns (in any orientation) in addition to adding support for the various barcode types.

License

This article, along with any associated source code and files, is licensed under The Code Project Open License (CPOL)


Written By
Software Developer (Senior)
United States United States
This member has not yet provided a Biography. Assume it's interesting and varied, and probably something to do with programming.

Comments and Discussions

 
QuestionPDF document Pin
Member 1139256621-Jan-15 10:41
Member 1139256621-Jan-15 10:41 
Bugerror in reading barcode Pin
san.1234531-Aug-12 2:14
san.1234531-Aug-12 2:14 
QuestionBarcodeImaging DLL Pin
Akshay 00719-Mar-12 0:34
Akshay 00719-Mar-12 0:34 
GeneralMy vote of 5 Pin
Manoj Kumar Choubey26-Feb-12 19:37
professionalManoj Kumar Choubey26-Feb-12 19:37 
GeneralHelp me for Barcode 39 Extension Pin
naorem24-Jan-10 19:47
naorem24-Jan-10 19:47 
GeneralDone with Locate & Rotate Barcode [modified] Pin
techexpertgroup19-May-08 9:48
techexpertgroup19-May-08 9:48 
GeneralRe: Done with Locate & Rotate Barcode Pin
Berend Engelbrecht2-Oct-09 5:27
Berend Engelbrecht2-Oct-09 5:27 
QuestionBarcode 128 Pin
Ira8429-Nov-07 22:31
Ira8429-Nov-07 22:31 
Generalhistogram Pin
samis20007-Sep-06 23:45
samis20007-Sep-06 23:45 
GeneralSuggestion If I may.. Pin
Pandele Florin5-Sep-06 3:38
Pandele Florin5-Sep-06 3:38 
I have a lot to do with comercial barcode detectors.They all detect barcodes on an binary (black&white)image.Some of them mask this by producing internally the bw image they need. I think It would be a lot esier to detect a barcode on an BW image and a little faster too.
GeneralRe: Suggestion If I may.. Pin
Berend Engelbrecht3-Oct-09 3:10
Berend Engelbrecht3-Oct-09 3:10 
Generalbarcode v2 Pin
waelahmed9-Aug-06 4:29
waelahmed9-Aug-06 4:29 
QuestionPossible bug? Pin
xWayne25-May-05 12:05
xWayne25-May-05 12:05 
AnswerRe: Possible bug? Pin
xWayne25-May-05 12:07
xWayne25-May-05 12:07 
GeneralRe: Possible bug? Pin
Benjamin Liedblad27-May-05 7:38
Benjamin Liedblad27-May-05 7:38 
GeneralRe: Possible bug? Pin
xWayne27-May-05 8:35
xWayne27-May-05 8:35 
GeneralRe: Possible bug? Pin
Reelix18-Nov-08 19:18
Reelix18-Nov-08 19:18 
GeneralRe: Possible bug? [modified: new CodeProject version published] Pin
Berend Engelbrecht2-Oct-09 7:35
Berend Engelbrecht2-Oct-09 7:35 
GeneralRe: Possible bug? Pin
Reelix4-Oct-09 20:33
Reelix4-Oct-09 20:33 
GeneralInteresting Pin
Joel Holdsworth25-Mar-04 6:25
Joel Holdsworth25-Mar-04 6:25 
Generalvision algorithms Pin
Member 1324872631-Mar-04 2:35
Member 1324872631-Mar-04 2:35 
GeneralRe: Interesting Pin
gpj geoff31-Mar-04 17:07
gpj geoff31-Mar-04 17:07 
GeneralRe: Interesting Pin
Lucian_RT20-Jun-05 8:36
Lucian_RT20-Jun-05 8:36 

General General    News News    Suggestion Suggestion    Question Question    Bug Bug    Answer Answer    Joke Joke    Praise Praise    Rant Rant    Admin Admin   

Use Ctrl+Left/Right to switch messages, Ctrl+Up/Down to switch threads, Ctrl+Shift+Left/Right to switch pages.