openCVを介して何らかの方法で変更した画像があるとします。
そして今、私たちはそれにグラデーションマップを適用したいと思います(フォトショップを介して適用できるもののように):
では、openCVを介してグラデーションマップ(虹色)を適用する方法を知りたいですか?
openCVを介して何らかの方法で変更した画像があるとします。
そして今、私たちはそれにグラデーションマップを適用したいと思います(フォトショップを介して適用できるもののように):
では、openCVを介してグラデーションマップ(虹色)を適用する方法を知りたいですか?
Pythonを使用して偽色/疑似カラーの画像を作成する方法は次のとおりです。C++への変換は非常に簡単です。概要:
ただし、いくつかの問題があります...
180 / 256.0
から:へ:
これを変更することが重要な場合は、すべての色相要素をオフセットし、それらを180前後にラップすることで変更できます(そうでない場合は飽和します)。コードは、このカットオフポイントで画像をマスクしてから、適切にオフセットすることでこれを行います。120のオフセットを使用して、カラースケールを生成します。
から:へ:
この方法で処理された画像は、(最後に)あなたの画像と非常によく一致しているようです。
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)
で処理された画像offset = 120
:
現在、applyColorMapと呼ばれるopenCV関数が存在し、このプロセスを簡単にします。次のコードはトリックを行います
image_cm = cv2.applyColorMap(image, cv2.COLORMAP_JET))
そしてこれが結果です: