2012-01-12 11 views
1

Windows 7のMS Visual C++ 2010でOpenCV 2.2を使用しています。32ビットアプリケーションです。OpenCV:負の数で行列を作ることができません

私は以下のマトリックスを作ろうとしています。 [-1 0 1]。

私は[255 0 1]を得る

cv::Mat Kernel = cv::Mat::zeros(1, 3, CV_8S); 

Kernel.data[0] = -1; 

Kernel.data[2] = 1; 

を試してみてください。

私はCV_8Sの代わりに同じ結果を得ます。

私が間違っていることを誰でも見ることができますか?

おかげで、 ピーター

+1

を達成するためのよりよい構文を持っているあなたはそれがちょうど '符号なしbyte'として表示されていませんか? – tbridge

+0

MSVSウォッチウィンドウによれば、それは私にunsigned char * so -1 - > 255のデータ型を与えています。私はなぜCV_8Sが私に署名を与えないのか分からない。ご返信ありがとうございます。 – OtagoHarbour

答えて

2

cv::Matのデータメンバーは、データをキャストせずにかかわらず、実際のマトリクス型(すなわちCV_8U)、は私がを推測あなたはkernel.dataを反復処理して値を印刷するchar*実際uchar*にありませんuchar*からchar*まで(または同じことをしないで時計でチェックしてください)、なぜ負の数が表示されないのかなどです。

また、あなたが同じ

cv::Mat kernel = (cv::Mat_<char>(1,3) << -1, 0, -1); 
+0

このような状況で作業する最善の方法は、行列と同じ種類の別のポインタvarを作成し、それを使用することです。 'char * dataPtr =(char *)kernel.data'それでは、印刷/修正は狭義です/ – Sam

+0

動的な行と列が必要な場合はどうしたらいいですか? – Shohreh

関連する問題