4

PIL と OpenCV で png 画像を読み込むと、色がずれます。黒と白はそのままですが、茶色が青に変わります。

このサイトは初心者が画像を投稿することを許可していないため、画像を投稿できません。

コードは cv.LoadImageM を使用するのではなく、以下のように記述されています。実際のケースでは生の画像が tcp 経由で受信されるためです。

コードは次のとおりです。

#! /usr/bin/env python
import sys
import cv
import cv2
import numpy as np
import Image
from cStringIO import StringIO

if __name__ == "__main__":
    # load raw image from file
    f = open('frame_in.png', "rb")
    rawImage = f.read()
    f.close()

    #convert to mat
    pilImage = Image.open(StringIO(rawImage));
    npImage = np.array(pilImage)
    cvImage = cv.fromarray(npImage)

    #show it
    cv.NamedWindow('display')
    cv.MoveWindow('display', 10, 10)
    cv.ShowImage('display', cvImage)
    cv. WaitKey(0)

    cv.SaveImage('frame_out.png', cvImage)

色ずれはどのように修正できますか?

4

3 に答える 3

8

OpenCV のイメージには、BGR の順序で配置されたカラー チャネルがありますが、PIL のイメージは RGB です。次のようにチャンネルを切り替える必要があります。

import PIL.Image
import cv2

... 

image = np.array(pilImage) # Convert PIL Image to numpy/OpenCV image representation
image = cv2.cvtColor(image, cv2.COLOR_RGB2BGR) # You can use cv2.COLOR_RGBA2BGRA if you are sure you have an alpha channel. You will only have alpha channel if your image format supports transparency.
...

@Krish: バグを指摘してくれてありがとう。前回はコードをテストする時間がありませんでした。

お役に立てれば。

于 2012-07-21T08:04:36.740 に答える
0

変化する

pilImage = Image.open(StringIO(rawImage))

pilImage = Image.open(StringIO(rawImage)).convert("RGB")
于 2012-07-21T05:54:36.187 に答える
0

光の錬金術師の答えはうまくいきませんでしたが、それは問題を説明しました. リバースは Apha チャネルによって台無しにされませんか。つまり、BRGA が AGRB に変更されます。Froyoの回答で解決すると思いますが、表示される画像はまったく変わりませんでした。うまくいったのは、OpenCV で色を反転させることでした。初心者すぎて理由がわかりません。彼らは私と同等のようです。numpy で追加の処理が計画されているため、numpy で色を反転することをお勧めします。しかし、助けてくれてありがとう、答えは私を正しい方向に導きました.

pilImage = Image.open(StringIO(rawImage));
bgrImage = np.array(pilImage)
cvBgrImage = cv.fromarray(bgrImage)

# Reverse BGR
cvRgbImage = cv.CreateImage(cv.GetSize(cvBgrImage),8,3)
cv.CvtColor(cvBgrImage, cvRgbImage, cv.CV_BGR2RGB)

#show it
cv.ShowImage('display', cvRgbImage)
cv. WaitKey(30)    # ms to allow display
于 2012-07-23T03:26:28.757 に答える