0

複数のフレームの平均値を計算するプログラムを作成しました。この平均値を保存すると、フレームは965KBのファイルになりますが、OpenCVに基づいて5.93MBのSCILABで同じことを行います。より論理的に聞こえます。とにかく、私はfwriteを使用してフレームを書き込むことにしました。ここでは、何をしましたか。

 cv::Mat meanFrame= cv::Mat::zeros(height,width,CV_32FC3);
cv::Mat frameR;
FILE* inpR = NULL;
...... //after calculating the meanFrame
inpR = fopen("d:\\red.txt","wb+");
for(int row = 0; row < meanFrame.rows; ++row) {
    for (int col = 0; col < meanFrame.cols; ++col) {
        std::cout << meanFrame.at<cv::Vec3f>(row, col)[1] <<std::endl;
        std::cout << meanFrame.at<cv::Vec3f>(row, col)[2] <<std::endl;
        fwrite(&resultframe.at<cv::Vec3f>(row,col )[0],sizeof(float),1,inpR);
    }
}
fcloseall();

pfチャネル1と2を見ることができますが、ファイルred.txtをopencvすると、次のようになります。

  €€<€€<€€<€€<€€<€€<€€<€€<€€<€€<€€<€€<€€.......

ここで何が欠けているのか、その後、それらのファイルをSCILABにロードして、フレームをファイルとして保存したいと思います。ご協力いただきありがとうございます!

4

1 に答える 1

2

バイナリデータ(floatがメモリに格納される方法)を書き込んでいます。

(エディターまたはコマンドラインで)ファイルを表示すると、これはテキストデータであると見なされ、文字として解釈されます。

この値を別のプログラムに読み込む必要がある場合は、fwriteとfreadを使用できます(ただし、CPUが異なる場合はバイト順序に問題がある可能性があります)

結果を確認したいだけの場合、または結果を別のプログラムに読み込むためにもう少し作業が必要な場合は、次のように値を出力できます。

printf("%f", resultframe.at<cv::Vec3f>(row,col )[0]);
于 2013-02-18T17:20:47.913 に答える