2012-03-29 13 views
2

私のウェブカメラのフレームのピクセルカラーを選択しようとしています。だから私は何も問題なくImageBoxでショーフレームをキャプチャします。しかし、ImageBoxに保存された画像にアクセスしようとすると、ImageBoxをダブルクリックするとCvExceptionが発生します。イメージのピクセルを取得しようとすると、例外がポップします。EmguCV ImageBoxイメージを取得するにはどうすればよいですか?

のOpenCV:認識されていないか、サポートされていない配列型

これは私がフレームをキャプチャする方法である:

// On Form Load 
Application.Idle += ProcessFrame; 

private void ProcessFrame(object sender, EventArgs arg) 
    { 
     if (cap != null) 
     { 
      using (Image<Bgr, byte> frame = cap.QueryFrame()) 
      { 
       if (frame != null) 
       { 
        imageFrame = frame; 
        imageBoxFrame.Image = imageFrame; 

        Bgr color = imageFrame[50, 100]; 
       } 
      } 
     } 
    } 

とDoubleClickイベントで:

private void imageBoxFrame_MouseDoubleClick(object sender, MouseEventArgs e) 
    { 
     if (treeViewObjects.SelectedNode is ColorNode && !isTracking) 
     { 
      if (imageFrame == null) 
       return; 

      Emgu.CV.UI.ImageBox imageBox = (Emgu.CV.UI.ImageBox)sender; 
      Image<Bgr, byte> image = (Image<Bgr, byte>)imageBox.Image; 

      Bgr color = image[e.X, e.Y]; // This line causes the Exception 
     } 
    } 

どうやら画像がされnullではありません。 私は間違っていますか?スレッドのもので多分何か?

+0

しばらくして、これは「オープン質問」キューから出てくるので、あなたはあなた自身の質問に答える必要があります。 –

答えて

3

(質問OPで答え、要求された投稿回答Question with no answers, but issue solved in the comments (or extended in chat)を参照してください。)

ザ・OPが書いた:

が、私はそれを解決しました。

私は画像を複製する必要があります。使用するステートメントは画像データを消去するためです。だから、ProcessEventで私はちょうどフレームをimageFrameにクローンする必要があります。

imageFrame = frame.Clone(); 

、別の問題を抱えています。ピクセルデータにアクセスする正しい方法は、[X、Y]ではなく[Y、X]です。

Bgr color = image[e.Y, e.X]; 
関連する問題