2011-06-30 9 views
0

Data[,,]を使用してグレーイメージの各ピクセルにアクセスできましたが、Bgrイメージではアクセスできませんでした。 私は次のコードを書かれている:私は、ブレークポイントを追加することによって確認され、その結果、このあっObject reference not set to an instance of an object.イメージを読み取れない<Bgr, byte> C#emgucvの.Dataプロパティ

currentFrame.Data is nul 
grayFrame.Data has 3d array 
gray has value 71 

た後、次の行が原因となったエラー例外をスロー

Image<Bgr, byte> currentFrame = capture.QueryFrame(); 
Image<Gray, byte> grayFrame = currentFrame.Convert<Gray, byte>(); 
Byte gray = grayFrame.Data[0, 10, 0]; 
Byte blue = currentFrame.Data[0, 10, 0]; 

なぜ3次元配列であったはずのcurrentFrame.Dataがnullですか? BgrイメージのImage.Dataプロパティにどのようにアクセスできますか?

私はemgucv 2.2.1を使用しています。同じ問題が2.1バージョンで発生しました。私が見つけた何を任意のヘルプ


ため

おかげで、非常に驚​​くべきことです。

Image<Bgr, byte> currentFrame = capture.QueryFrame(); 
byte b; 
try 
{ 
    b = image.Data[0, 0, 0];   //Line (A) 
} 
catch (Exception ex) 
{ MessageBox.Show("Before Convert : "+ex.Message); }   

image = image.Convert<Bgr, byte>(); 

try 
{ 
    b = image.Data[0, 0, 0];   //Line (B) 
} 
catch (Exception ex) 
{ MessageBox.Show("AfterConvert : "+ex.Message); } 

上記のコードでは、Line(A)は例外 "オブジェクトのインスタンスに設定されていません"をスローします。しかし、コードを追加した後に、行(B)は例外なくスムーズに実行されます。

これがなぜ起こっているのですか?

+1

どのような言語ですか?それはC#ですか?適切なタグを追加して、コードを理解している人の助けを得ることができます。 – karlphillip

答えて

0

capture.QueryFrame()は、最後の行でアクセスしようとするnullを返します。私はその方法の中を見るだろう。私は推測しています.Convertは拡張メソッドであり、そのメソッドはnullをチェックし、nullでないものを返します。

+0

capture.QueryFrame()が有効なフレームBeacuseを返しましたimageBox1.Image = currentFrameとしてフレームを表示することができました;正常に動作します) – KarunP

3

[それは答えることは非常に遅れているが、私は今後の参考のためにこれを掲示しています。]
は最近、私は同じ問題に直面しました。私はQueryFrameからDataプロパティによって返された画像のピクセル値にアクセスできませんでした。しかし、任意の操作(例えば、サイズ変更、変換)を適用した後、結果として得られる画像はアクセス可能である。これとソリューションの背後にある理由は非常に簡単です。

DataQueryFrameによって返される画像のプロパティは常にnullです。その画像データは管理されていないメモリに格納されているため、アクセスは完全にDataのプロパティにはアクセスできません。フレームのピクセル値にアクセスするには、それを複製するだけです。

Image<Bgr, byte> currentFrame = capture.QueryFrame(); 
Image<Bgr, byte> frame = currentFrame.Clone(); 
// now access using Data property 
byte b = frame.Data[0,0,0]; 
byte g = frame.Data[0,0,1]; 
byte r = frame.Data[0,0,2]; 
-1

Heyyそこに.xmlファイルを追加してみてください。/ bin/Debug。次に、ProcesFrame Methodを入力します:// haar is HaarCascade haar = new HaarCascade( "haarcascade_frontalface_default.xml");

関連する問題