このコンストラクターを使用して、メモリに割り当てたデータから Mat オブジェクトを作成しようとしています。
C++: Mat::Mat(Size size, int type, void* data, size_t step=AUTO_STEP)
私は C++ にかなり慣れていないので、どこかで初歩的なエラーを起こしている場合は注意してください。基本的に私がやろうとしているのは、生のビデオファイルから画像を表示することです。これを行うために、ファイルからデータを読み取り、メモリに割り当てました。
struct videoFrame{
float frameTime;
unsigned short int year, day, msec;
unsigned char hour, min, sec;
unsigned short int mFrame[SIZE];
};
...
//seek to first frame
vfs.seekg(2560, ios_base::beg);
int pos;
for(pos=0; pos<SIZE;pos++){
vfs.read( (char*) &mVideoFrame1->mFrame[pos], sizeof(short));
}
Mat mImage1( Size(WIDTH, HEIGHT), CV_16UC1, mVideoFrame1->mFrame, HEIGHT * 2);
namedWindow("Frame 1", CV_WINDOW_AUTOSIZE);
imshow("Frame 1", mImage1);
waitKey(0);
フレームやビデオヘッダーなど、ファイルからデータを読み取ることができました。コンストラクターがどのように機能するかについて明確ではないかもしれないと思います。誰かが素晴らしい洞察を提供できれば。namedWindowでフレームを表示すると、すべて黒になります。
ところで...
const int HEIGHT = 512;
const int WIDTH = 640;
const int SIZE = HEIGHT * WIDTH * 2;
最初のフレームの生データは 512x640 16 ビットの符号なしリトル エンディアン バイト順の白黒です。