Hola, piensaenverde, bienvenido al Club. Como a todos los novatos, te invito a que revises la
Guía de Estilo si no lo has hecho todavía.
Respecto a tu pregunta, independientemente de que por estos lares el C++ no goza de mucha popularidad (
personalemente creo que deberían colgar a Bjarne Stroustrup de los padrastros por haberlo creado ), he de decirte que la comparación de imágenes es harto compleja y que lo que sale en películas y series como CSI y Bones no es
ciencia-ficción sino directamente magia.
Lo que más afecta al resultado es la calidad de la imagen. Si se trata de PNGs, bien, pero si son JPEG más vale que tengan la calidad al máximo. Y no vale pasar una imagen JPEG a PNG, porque el problema es que el algoritmo usado por JPEG degrada la imagen, aun a máxima calidad. Peor con MPEG (esto incluye DVD y BlueRay), que como no pilles un fotograma clave, y esté la calidad al máximo, estás vendido. Y cuando digo al máximo, me refiero a más calidad de la que suelen tener por defecto.
Por lo tanto, lo primero que haría yo es buscar imágenes de alta calidad, a ser posible que no hayan pasado por JPEG ni MPEG, a ver qué pasa. Si con esas imágenes funciona, ya sabes dónde está el problema.
De todas formas,
la comparación de imágenes 2D no tiene (casi) nada que ver con la comparación de objetos 3D. Salvo que quieras comparar objetos vóxel, en cuyo caso quizá sí te podrían servir las mismas estrategias. O quizá estés pensando en comparar los datos obtenidos por Kinect, que entonces también valdrían.