Ich arbeite seit einigen Jahren in dem Bereich (industrielle Bildverarbeitung) als C++ Entwickler und kann dir versichern: So einfach wie du dir das vorstellst ist das alles nicht.
Zum einen: Wie stellst du sicher, dass die realen Objekte unter der Kamera an exakt der selben Position liegen, wie in deinem Referenzbild? Ich habe Anlagen mit Industrierobotern gesehen die mehrere mio kosten und selbst deren Handhabung weicht immer leicht von Objekt zu Objekt ab. Was man hierbei insbesondere leicht unrerschätzt ist die Verdrehung. Dh der Objektmittelpunkt stimmt evtl auf den Pixel genau aber bereits durch 0,5° Verdrehung zur Referenz hast du im Randbereich Positionsfehler die jeden simplen Pixelvergleich unmöglich machen.
Zum anderen: Hast du überhaupt eine Industriekamera (500€+) mit kalibrierbarem Weißabgleich und Aufnahmebedingungen die jedes Fremdlicht ausschließen? Wenn im Umkreis auch nur eine Leuchtstoffröhre ist (diese pulsieren schneller als das Auge es wahrnimmt) wird jedes Bild nicht nur unterschiedlich hell sondern auch noch unterschiedliche Farben bekommen.
Das heißt natürlich dass du zwangsläufig eine vernünftige Lampe(500€+) brauchst. Üblicherweise nimmt/baut man hier LED-Lampen die man für die Belichtungszeit der Kamera kurz blitzen lässt:
http://www.stemmer-imaging.de/de/produkte/beleuchtungen
Kameras:
http://www.stemmer-imaging.de/de/produkte/kameras
Dann soll das Programm feststellen können zu wie viel Prozent die Bilder übereinstimmen
Hier gibts natürlich unzählige Ähnlichkeitsmaße. Das bekannteste ist die Korrelation. Hier etwas theoretischer Hintergrund:
http://de.wikipedia.org/wiki/Korrelation_(Signalverarbeitung)
Und hier, wie man es möglichst schnell in C(++) zum laufen bringt:
http://docs.opencv.org/doc/tutorials/imgproc/histograms/template_matching/template_matching.html
Um den ersten von mir genannten Punkt zu lösen findet üblicherweise erstmal eine exakte Objektfindung statt. Dh im Kamerabild muss mit Sub-Pixel genauigkeit die exakte Lage (Ort und Drehlage) des Drucks bestimmt werden. Ohne wird es auf keinen Fall gehen!
Außerdem geht es wahrscheinlich um Farbdrucke, oder? Hier kommt ein neuer Unsicherheitsfaktor ins Spiel: Fast jede Farbkamera (ja, erst recht die super teuren dslr) haben pro Pixel nur genau eine Farb-Wahrnehmung. Dh entweder Rot, Grün oder Blau. Stichwort
http://de.wikipedia.org/wiki/Bayer-Sensor.
Dh wenn dein Objekt nur um einen Pixel wandert hast du vollkommen unterschiedliche Sensordaten, da die Filteralgorithmen dieses Farbmuster nie komplett entfernen können. Es gibt auch 3Chip Kameras (Prisma teilt die Farben auf 3 Chips auf) aber die haben idR nur 1024x768 und liegen bei über 2000€.
Ohne dir zu nahe treten zu wollen, aber ich halte es ohne Fachkenntnisse für unmöglich so etwas in einem industrietauglichen Zustand zu bauen - auch wenn man natürlich mit genug Programmierkenntnissen ein Kamerabild mit einem Datei-Bild vergleicht kriegt.
Falls du ein Linux zur Hand hast würde ich die empfehlen mal hiermit ein bisschen rumzuprobieren, da hier schon ein großer Teil der nervigen Grundlagenarbeit erledigt ist:
http://code.google.com/p/qt-opencv-multithreaded/
Du könntest also im ersten Schritt einen weiteren Filter hinzufügen der eine Korrelationsberechnung (Das verlinkte Tutorial oben) mit deinem Referenzbild macht.
Generell noch Fragen: Woher erfährt der PC das er ein Bild machen soll? Wahrscheinlich generiert die Anlage ein 24V SPS Signal sobald das Objekt in Position ist? Dann brauchst du irgend eine Hardware die dieses Signal an den PC verständlich weiterreicht. Und was passiert wenn der PC sagt "Objekt OK" oder "Objekt fehlerhaft"? Die Entscheidung muss doch wahrscheinlich auch wieder SPS kompatibel an eine Anlage übertragen werden. Oder steht den ganzen Tag jemand und klickt den Button "Bild aufnehmen" und nimmt die schlecht-Drucke manuell runter? ;-)
Selbst wenn eine Freeware existieren würde brauchst du hier auf jeden Fall auch Hardware die die Kamera triggert und das Licht blitzt. (Lichtkontroller 500€+)