2

ビデオから画像をロードしました:

 Image<Gray, byte> imGray=cap.QueryGrayFrame();  

ここで、openCv の cvCornerHarris 関数を次のように使用します。

 Image<Gray, byte> harRes = new Image<Gray, byte>(imGray.Size);  
 CvInvoke.cvCornerHarris(imGray, harRes, 8, 3, 0.04); 

しかし、cvException が発生します。

OpenCV: src.size() == dst.size() && dst.type() == CV_32FC1 Error

ここに画像の説明を入力

これを修正するにはどうすればよいですか?

4

2 に答える 2

3

指定された例外から、宛先イメージのタイプは である必要があると推測できますCV_32FC1

あなたの場合、宛先イメージはharRes次のように宣言した です。

Image<Gray, byte> harRes = new Image<Gray, byte>(imGray.Size);

この画像のタイプは ですCV_8UC1

次のように宣言する必要があります。

Image<Gray, float> harRes = new Image<Gray, float>(imGray.Size);

現在、その型は ですCV_32FC1。これは、関数によって期待される型cvCornerHarrisです。

于 2012-10-31T19:11:35.460 に答える
3

C# ラッパーについてはよくわかりませんが、C++ では、次の行を使用してピクセル形式を変更できます。

imGray.convertTo(A, CV_32F);

エラーは、画像のサイズが一致する必要があり(コードが同じことを行う)、ピクセル形式がfloat32である必要があることを示していますが、これはおそらくあなたのものではありません。

于 2012-10-31T17:54:28.520 に答える