目标:
我正在尝试使用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)