インデックス付きイメージをそのまま (3 チャネルの 24 ビット イメージではなく) 読みたいとします。インデックス付きイメージのカラー パレットを読み込んで変更したいとします。opencv では、画像のカラー パレットを抽出するような関数に遭遇したことはありません。また、パレットのデータ型を知りたいです。私はopencvを使用してcでコーディングしています
2 に答える
画像リンクをありがとう。まず、OpenCVはGIFをサポートしていません(Ameya005がリンクされているため)。ただし、他のインデックス付きパレット画像形式があります。OpenCVでインデックス付きパレットの画像を取得できなかったので、何かを見逃していない限り、OpenCVでインデックス付きパレットを直接操作できるとは思いません。別の解決策が必要なようです。インデックス付きパレットを直接操作する必要があるのはなぜですか?
ただし、以下の2番目のオプションでは、必要なのがそれだけであれば、OpenCVにインデックスを含めることができます(パレットは失われます)。
これが私が試したことです:
パレット化されたPNGをロードします(3チャンネルカラーに変換されます)
import cv2
im = cv2.imread("mandril_color.png")
im.shape # returns (512, 512, 3) so it's been converted to 3-channel color
パレットGIFをロードします(グレースケールに変換されます)
これは、強度として使用されるインデックスを使用してグレースケールに変換されていると思いますが、検証していません。
import cv2
import Image
import numpy as np
im_pil = Image.open("mandril_color.gif")
im_cv = np.asarray(im_pil)
im_cv.shape # returns (512, 512) so it's become grayscale
OpenCVで最初からパレット画像を作成する
私はこれを行う方法を見つけていません。
まあ、OpenCV にはこれを行う機能はないと思います。cvLoadImage() または imread() 関数は、コーデックに libpng を使用して画像を直接読み取ります。
詳細については、ドキュメントを確認してください