私はimwrite()を使って画像を "face.jpg"のようにディスクに書き込むことができます。 fstreamを使ってこのjpgを配列に読み込みます。この配列は私が望むものです。Opencvすぐにマットから画像ストリームを取得する方法は?
しかし、これを迅速に取得するにはどうすればよいですか? memmory not diskから。 Mat.dataの画像データ長がMat.cols * Mat.rows.Iであると思っていました。私はfstreamをディスクに書き込んだ後、画像ビューアで何も表示しませんでした。何か間違っている必要があります。
Mat frame;
VideoCapture cap(0);
if (!cap.isOpened())
{
return -1;
}
cap.set(CV_CAP_PROP_FRAME_WIDTH, 160);
cap.set(CV_CAP_PROP_FRAME_HEIGHT, 120);
cap >> frame;
if(frame.empty()){
return -2;
}
//I just want the pointer and length of image information,the following is just for testing
//whether that the same as I thought,if it's right ,frame.data and len is what I want,but it not work.
FILE *fp = fopen("face.jpg", "wb");
if (NULL==fp)
{
return -1;
}
int len = frame.cols*frame.rows; //or 3*frame.cols*frame.rows
fwrite(frame.data, len, sizeof(char), fp);
fclose(fp);
namedWindow("face", 1);
imshow("face", frame);
waitKey(1000);
私はopencvで新しく、画像データを取得したいと思います。助けてください!
は、あなたが望むかもしれませ 'imencode()' http://docs.opencv.org/3.0-beta/modules/imgcodecs/doc/reading_and_writing_images.html#imencode – ZdaR
正確にあなたが達成しようとしていますか?イメージから別の構造に生のバイトをコピーしたいですか? – slawekwin
frame.cols * frame.rowsは、イメージが連続している場合にのみtrueになります。幅が477で、16の倍数ではない場合は、各行の最後に余白が追加される可能性があります.16または32の場合は覚えていませんが、パディングには2の累乗が使用されます。 – saurabheights