我可以在自己的自定义数据2D数组上使用opencvcvResize()函数吗?如果是,如何



目标:

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

1.我想从我的文本文件中读取2D数组。这个文件中有浮点值。我会在这个测试代码中使用opencv库打开这个文件,读取浮点的2D数组中的值。

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

3.然后我想把它放大4——宽*4,高*4。这是我的最后一个2D阵列。

4.将这个最终的2D数组作为浮点值存储到文本文件中。

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

感谢任何指点。

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

如果你使用的是OpenCV的C接口(通过观察你的其他问题,我知道你是),在成功地将文件中的数据读取到你的自定义数据类型(2D数组?)后,你需要创建一个足够大的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数组),或者对其执行任何操作

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

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

相关内容

最新更新