3

次のコード内で、考えられるすべての RGB カラーを含む 4096*4096 ピクセルの png 画像を使用します (同じピクセルを 2 回使用することはできません。ここで見つけることができますhttp://allrgb.com/starry-night ) 次に、RGB 値を次のように変換します。 LAB 値と各チャネルの範囲を確認します

import cv2 as cv
import numpy as np

im=cv.imread('allrgb.png')


im=im.astype(np.uint8)

colors_lab=cv.cvtColor(im,cv.COLOR_BGR2LAB)

m=np.amin(colors_lab[...,...,0])    

結果は次のとおりです。

元の画像が uint8 型の場合、R[0,255]、G[0,255]、B[0,255] は L[0,255]、A[42,226]、B[20,223] を返します。

元の画像のタイプが float32 の場合、R[0,1]、G[0,1]、B[0,1] は L[0,100]、A[-86.1813,98.2351]、B[-107.862,94.4758] を返します。

いずれにせよ、ラボの範囲は、オープン CV 文書によって提供される期待されるものではありません。

それを説明する方法はありますか?

4

1 に答える 1

1

OpenCV から返される LAB 値は、float 画像を変換する場合 ( OpenCV color conversions ) 、0 ≤ L ≤ 100、-127 ≤ a ≤ 127、-127 ≤ b ≤ 127 の範囲外になることはありません。8 ビット イメージを変換する場合、L の範囲は 255/100 で乗算され、a と b は 128 のオフセットを取得して 8 ビットの範囲を埋めます。

ただし、画像データの種類に関係なく、LAB 色空間の色域は RGB 色空間の色域を超えています。たとえば、LABに関するウィキペディアの記事の 2 番目の段落を参照してください。

したがって、RGB/BGR から LAB に変換する場合、LAB には RGB で表現できない色が含まれているため、LAB の全範囲を取得することはできません。

于 2014-11-18T15:04:03.137 に答える