1

私はこのコードを持っています:

Mat Marker = Mat::zeros(MarkerSize, MarkerSize, CV_8UC1);

cout << "Marker:" << endl;
for (int row=0; row<MarkerSize; row++)
{
for (int col=0; col<MarkerSize; col++)
cout << Marker.at<int>(row, col)<<", ";

cout << endl;
}

ここでMarkerSize=6、 およびCV_8UC1は変更できないことが望ましいです (ソリューションの場合)。

しかし、私はこの出力を得ます:

Marker:
0, 0, 0, 0, 0, 0, 
0, 0, 0, 0, 0, 0, 
0, 0, 0, 0, 0, 0, 
0, 0, 0, 0, 65536, -1664876544, 
0, 0, 0, 1, 1141152964, 289879, 
0, 65536, -1664876544, 1817658372, 1531445252, 2147447774,

どうやってそれを修正できますか?

4

1 に答える 1

4

オブジェクトMatは でインスタンス化されますCV_8UC1。つまり、MarkerSize*MarkerSize8 ビットの符号なし要素が含まれています。しかし、それをコンテナであるかintのように反復し、反復で範囲外になります。たとえば、要素にアクセスすることによって

Marker.at<uint8_t>(row, col)

これを出力するには、uint8_tによって解釈さstd::coutれる可能性があるため、別の整数型にキャストする必要がある場合があることに注意してくださいchar。例えば

cout << static_cast<int>(Marker.at<uint8_t>(row, col)) <<", ";
于 2015-05-13T20:11:08.877 に答える