目标:
我正在尝试使用openCV函数cvResize()来重新采样2D数组。[我在opencv中使用cvResize有一个工作代码,我知道它的用法]但是我要重新采样的输入2D数组不是任何图像读取通过openCV使用cvLoadImage()代替 -
1.我想从我拥有的文本文件中读取2D数组。该文件中包含浮点值。我将使用opencv库在此测试代码中打开该文件,读取浮点数的二维数组中的值。
2.然后使用cvResize()调整大小。首先,我想对其进行下采样 - 宽度/ 2,高度/ 2。
3.然后我要将其上采样4宽* 4,高* 4。这是我最后的2D阵列。
4.将最终的2D数组存储为文本文件作为浮点值。
5.基本上我想使用OpenCV使用的双线性插值逻辑,但是我自己的数据。我可以在哪个路径/哪个文件中看到cvResize()的代码?
任何指示赞赏。
答案 0 :(得分:1)
您可以在自定义数据之上使用Mat
包装,然后继续将其用作普通的Mat
对象。您将使用的构造函数是:
Mat::Mat(int rows, int cols, int type, void* data, size_t step=AUTO_STEP)
答案 1 :(得分:1)
这里的困难似乎是您正在使用数据类型(2D数组)来存储从文件中读取的数据,这与cvResize()
使用的内容不兼容(它是IplImage*
?)。
如果您正在使用OpenCV的C接口(并通过观察我知道您的其他问题),在成功将文件中的数据读取到您的自定义数据类型(2D数组?)之后,您需要创建一个{{ 1}}足以存储此信息。
IplImage * cv_data_img = cvCreateImage(cvSize(custom_data_height,custom_data_width),IPL_DEPTH_32F,1);
之后,您将不得不重复IplImage*
复制原始数据。
一旦cv_data_img
填满了数据,您就可以创建其他cv_data_img
来存储IplImage*
的结果。
最后,您可以迭代生成的cvResize()
并将其复制回原始数据类型(2D数组)或随意执行任何操作。