Hier ist eine Methode zum Erstellen falscher/Pseudo-Farb-Bilder mit Python, sollte die Konvertierung in C++ sehr einfach sein. Übersicht:
- Öffnen Sie Ihr Bild als Graustufen und RGB
- das RGB-Konvertierung von Abbildern zu HSV (Farbton, Sättigung, Wert/Helligkeit) Farbraum. Dies ist ein zylindrischer Raum, dessen Farbton durch einen einzelnen Wert auf der Polarachse dargestellt wird.
- Setzen Sie den Farbton-Kanal auf das Graustufenbild, das wir bereits geöffnet haben, dies ist der entscheidende Schritt.
- Den Wert und die Sättigungskanäle auf maximale Werte einstellen.
- In den RGB-Raum zurück konvertieren (andernfalls wird die Anzeige falsch angezeigt).
Es gibt ein paar Fänge obwohl ...
- Als Farbton in Grad gehalten wird und das Farbspektrum dargestellt wird, von 0 bis 180 (nicht 0-256 und 0-360 nicht (manchmal Fall)), wir müssen das Graustufenbild durch Multiplikation mit
180/256.0
- entsprechend skalieren. Im opencv-Fall beginnt die Farbton-Farbskala bei blau (nicht rot, wie in Ihrem Bild). dh. die Abbildung geht so:
aus:
zu: 
Wenn dies wichtig ist, dass wir durch Verrechnung der alle Farbton Elemente tun, dies zu ändern und wickeln sie um 180 (sonst wird es sättigen). Der Code tut dies, indem er das Bild an diesem Schnittpunkt maskiert und dann entsprechend abgleicht. Arbeiten mit einem Versatz von 120, erzeugt Ihre Farbkarte:
aus:
zu: 
und das Bild verarbeitet diese Art und Weise Ihr sehr gut zu passen scheint (am Ende).
import cv
image_bw = cv.LoadImage("TfBmw.jpg", cv.CV_LOAD_IMAGE_GRAYSCALE)
image_rgb = cv.LoadImage("TfBmw.jpg")
#create the image arrays we require for the processing
hue=cv.CreateImage((image_rgb.width,image_rgb.height), cv.IPL_DEPTH_8U, 1)
sat=cv.CreateImage((image_rgb.width,image_rgb.height), cv.IPL_DEPTH_8U, 1)
val=cv.CreateImage((image_rgb.width,image_rgb.height), cv.IPL_DEPTH_8U, 1)
mask_1=cv.CreateImage((image_rgb.width,image_rgb.height), cv.IPL_DEPTH_8U, 1)
mask_2=cv.CreateImage((image_rgb.width,image_rgb.height), cv.IPL_DEPTH_8U, 1)
#convert to cylindrical HSV color space
cv.CvtColor(image_rgb,image_rgb,cv.CV_RGB2HSV)
#split image into component channels
cv.Split(image_rgb,hue,sat,val,None)
#rescale image_bw to degrees
cv.ConvertScale(image_bw, image_bw, 180/256.0)
#set the hue channel to the greyscale image
cv.Copy(image_bw,hue)
#set sat and val to maximum
cv.Set(sat, 255)
cv.Set(val, 255)
#adjust the pseudo color scaling offset, 120 matches the image you displayed
offset=120
cv.CmpS(hue,180-offset, mask_1, cv.CV_CMP_GE)
cv.CmpS(hue,180-offset, mask_2, cv.CV_CMP_LT)
cv.AddS(hue,offset-180,hue,mask_1)
cv.AddS(hue,offset,hue,mask_2)
#merge the channels back
cv.Merge(hue,sat,val,None,image_rgb)
#convert back to RGB color space, for correct display
cv.CvtColor(image_rgb,image_rgb,cv.CV_HSV2RGB)
cv.ShowImage('image', image_rgb)
# cv.SaveImage('TfBmw_120.jpg',image_rgb)
cv.WaitKey(0)
Ihr Bild mit offset = 120
verarbeitet:

Nun anwenden, weiß nichts über OpenCV, aber der Prozess ist in zwei Teile geteilt, RGB zu Graustufen, und dann Graustufen zurück zu RGB mit diesem Gradienten. Siehe [hier] (http://nashruddin.com/opencv-examples-for-operation-on-images.html/5) für den ersten Teil und [hier] (http://stackoverflow.com/questions/6686868/opencv-color-mapping-mit-direct-pixel-access) für die Sekunde. – scientiaesthete