1

客观的:

我正在尝试使用 openCV 函数 cvResize() 重新采样 2D 数组。[我在 opencv 中有一个使用 cvResize 的工作代码,我知道它的用法] 但是我要重新采样的输入 2D 数组不是 openCV 使用读取的任何图像cvLoadImage() 代替 -

1.我想从我拥有的文本文件中读取二维数组。该文件中包含浮点值。我将使用 opencv 库在此测试代码中打开该文件,读取二维浮点数组中的值。

2.然后使用 cvResize() 调整它的大小。首先我想对其进行下采样 - 宽度/2,高度/2。

3.然后我想将它上采样4 - 宽度* 4,高度* 4。这是我最后的二维数组。

4.将此最终二维数组作为浮点值存储到文本文件中。

5.基本上我想使用OpenCV使用的双线性插值逻辑,但在我自己的数据上。什么路径/哪个文件可以看到 cvResize() 的代码?

任何指针表示赞赏。

4

2 回答 2

1

这里的困难似乎是您正在使用数据类型(2D 数组)来存储从文件中读取的数据,这与使用的数据不兼容cvResize()(还IplImage*记得吗?)。

如果您使用的是 OpenCV 的 C 接口(并且通过查看您的其他问题,我知道您是),在成功将文件中的数据读取到您的自定义数据类型(二维数组?)之后,您需要创建一个IplImage*足够大的存储此信息。

IplImage* cv_data_img = cvCreateImage(cvSize(custom_data_height, custom_data_width), IPL_DEPTH_32F, 1);

之后,您将不得不迭代cv_data_img复制原始数据。

填满cv_data_img数据后,您可以创建其他IplImage*存储结果所需的cvResize().

最后,您可以对结果进行迭代IplImage*并将其复制回原始数据类型(2D 数组)或使用它做任何您想做的事情。

于 2011-06-30T17:46:36.620 回答
1

Mat您可以在自定义数据之上使用包装器,然后继续将其用作普通Mat对象。您将使用的构造函数是:

Mat::Mat(int rows, int cols, int type, void* data, size_t step=AUTO_STEP)
于 2011-06-30T17:32:25.230 回答