I would ultimately like to write my own OMR (Optical Mark Recognition) program.

What language would you recommend is best to carry out this task.

Let's see, you chose to ask "which is the best language" in a C++ forum.

Are you going to listen to any answer which isn't "use C++" ?

Or let me put this another way, do you already know C++ in any shape or form?

If you understood the problem well enough to actually write this program, you wouldn't need to ask what language is best. I'll go out on a limb and say you're in over your head at present.

Let's see, you chose to ask "which is the best language" in a C++ forum.

Are you going to listen to any answer which isn't "use C++" ?

Or let me put this another way, do you already know C++ in any shape or form?

No, new to programming, so I would like to invest what free time I have to the best (and probably the quickest to grasp!) language. Any advice would be appreciated, as I would be frustrated 6 months down the line to find that the language (whichever one) does not have the command(s) to carry out the task.

If you understood the problem well enough to actually write this program, you wouldn't need to ask what language is best. I'll go out on a limb and say you're in over your head at present.

I am looking at the problem in this way:

If I can read the colour of pixels on the screen at certain locations I could determine if a location has been completed or not.

There will be many locations to read with the option of, “if box A is ticked then box B must be ticked or report an error” etc.

Most programming languages are a very generalised means of implementing all kinds of solutions. C++ is used from everything from a mobile phone to your games to your browser. Although you may think your time would be better spent, once you do "get it", a whole host of possibilities become open to you.

There may well be some "language" or "library" which makes your OMR as easy as falling off a log, but you won't be able to use that knowledge for anything else, it will be far too specialised.

Most of what you've said so far is more reliant on the Win32 API (or the API of whatever OS you're using) rather than any specific language feature.

The next question is where is your data coming from?
Because if it's coming from a scanned image of a hard-copy form, then there are a whole range of other problems which you'll need to solve.
But if the data is already in a machine readable form, why do you need to complicate it with OMR?

The images (pre printed survey forms) will be scanned in.
Yes I can see problems with alignment for one, but there should be a way of solving this.
Running Windows XP

How much tolerance of colour / greyscale is there?

Are the user "marks" computer generated, or are they hand marked with a pen? What about different pen colours?

What about upside-down scanned images?

What about mirrored images (even possible)?

Do the scanned images have "registration" marks which help orient and position the scanned image. If they don't, that makes it harder.

What image format are the images in? I'm guessing JPEG if they're coming direct from a scanner.

Just a sample of the questions I would be asking about the problem before I even get anywhere near the code.

Tolerance of colour and grey scale - not sure

User marks with a black pen

Upside down forms - could be rejected, or tell the program the form is upside down and scan accordingly.

Mirrored images – same as above, but these will be unlikely.

No registration marks as such – was thinking of using lines /characters already printed on the forms.

Images will be JPEG

Thanks for the interest, I assume from your questions that C++ has the potential to solve the problem.

The real trick will be finding a good JPEG library which has lots of useful API calls to do all the heavy work for you. JPEG is not a file format you want to deal with from first principles.

After that, pretty much any popular language should be able to perform the tasks required.

This question has already been answered. Start a new discussion instead.