2016-04-26 2 views
2

カメラから画像を取得するのに以下のコードを使用していますが、カメラ画像の色が異なっています。たぶんOpenCVカメラの画像が青みがかった

public Mat mat = new Mat(); 
private BufferedImage img; 
private byte[] dat; 

    public void getSpace(Mat mat) { 
      this.mat = mat; 
      int w = mat.cols(), h = mat.rows(); 
      if (dat == null || dat.length != w * h * 3) 
       dat = new byte[w * h * 3]; 
      if (img == null || img.getWidth() != w || img.getHeight() != h || img.getType() != BufferedImage.TYPE_3BYTE_BGR) 
       img = new BufferedImage(w, h, BufferedImage.TYPE_3BYTE_BGR); 
     } 

     public BufferedImage getImage(Mat mat) { 
      getSpace(mat); 
      mat.get(0, 0, dat); 
      img.getRaster().setDataElements(0, 0, mat.cols(), mat.rows(), dat); 
      return img; 
     } 

enter image description here

+3

は、赤と青のチャンネルのように見える下記Mickaのコメントを見てください(緑色の光はまだ緑ですが、青色光は、赤と赤みがかっている入れ替わりますあなたのコードは奇妙です。 – Micka

+0

あなたのコードは奇妙です。グローバル変数 "img"ですか? – Micka

+0

@Mickaいいえ、それは公開されていない、私は今もフィールドを含めた。 – PRCube

答えて

1

があなたのイメージではなく、BRGのタイプRGBのでしょうか?その場合、あなたは赤と青の色を交換しました。 TYPE_3BYTE_BGRTYPE_3BYTE_RGBに変更してみてください

[編集]申し訳ありません、私はOpenCVのPython側です。起こったことは、あなたが誤ってチャンネルBとR(画像マトリックスの1番目と3番目のレイヤー)を切り替えたことです。これを元に戻す必要があります。必要に応じてマトリックスで交換してください。

リンクは役立つかもしれない:

[EDIT2] Converting BufferedImage to Mat in opencv

+0

残念ながら、TYPE_3BYTE_RGBは存在しません。存在する唯一のrgbは、動作しないTYPE_INT_RGBです。 – PRCube

+1

opencvマットをrgbからbgrに変換しようとすることができます。 C++のコードはcv :: cvtColor(mat、mat、CV_RGB2BGR)でしょうか、おそらくあなたはそれをxanに変換しますか? – Micka

関連する問題