0

我有一个数组double dc[][],想将其转换为 aIplImage* image并进一步转换为视频帧。我必须做的是给我一个视频,然后我提取了一些特征,然后为提取的特征制作一个新视频。我的方法是将视频分成帧,从每一帧中提取特征,然后像这样进行更新,在帧的每次迭代中,我得到一个新的 dc

double dc[48][44];
for(int i=0;i<48;i++)
{
  for(int j=0;j<44;j++)
  {
     dc[i][j]=max1[i][j]/(1+max2[i][j]);
  }
}

现在我需要以一种可以重建视频的方式保存这个 dc。任何人都可以帮我解决这个问题。提前致谢

4

1 回答 1

1

如果您可以使用Mat,那么您可以Mat为现有的用户分配的内存创建一个。其中一个Mat构造函数具有签名:

Mat::Mat(int rows, int cols, int type, void* data, size_t step=AUTO_STEP)

其中参数是:

rows: the memory height, 
cols: the width, 
type: one of the OpenCV data types (e.g. CV_8UC3), 
data: pointer to your data, 
step: (optional) stride of your data

我鼓励你看看Mat 这里的文档

编辑:只是为了让事情更具体,这里有一个从一些用户分配的数据制作 Mat 的例子

int main()
{
    //allocate and initialize your user-allocated memory
    const int nrows = 10;
    const int ncols = 10;
    double data[nrows][ncols];
    int vals = 0;
    for (int i = 0; i < nrows; i++)
    {
        for (int j = 0; j < ncols; j++)
        {
            data[i][j] = vals++;
        }
    }
    //make the Mat from the data (with default stride)
    cv::Mat cv_data(nrows, ncols, CV_64FC1, data);
    //print the Mat to see for yourself
    std::cout << cv_data << std::endl;
} 

您可以通过 OpenCV VideoWriter 类将 Mat 保存到视频文件中。您只需要创建一个 VideoWriter,打开一个视频文件,然后写入您的帧(作为 Mat)。您可以在此处查看使用VideoWriter的示例

下面是一个使用 VideoWriter 类的简短示例:

//fill-in a name for your video 
const std::string filename = "...";
const double FPS = 30;
VideoWriter outputVideo;
//opens the output video file using an MPEG-1 codec, 30 frames per second, of size height x width and in color 
outputVideo.open(filename, CV_FOURCC('P','I','M,'1'), FPS, Size(height, width));

Mat frame;
//do things with the frame
// ...

//writes the frame out to the video file
outputVideo.write(frame);

VideoWriter 的棘手部分是文件的打开,因为您有很多选择。您可以在此处查看不同编解码器的名称

于 2013-05-15T22:03:13.130 回答