Qt+OpenCV+Atlas的使用

一、图片数据的预处理。
简单来说就是用opencv自带的函数cv::dnn::blobFromImage,得到blob,然后处理一下得到的blob数据。最后将数据保存起来或者传递给Atlas。

1.用opencv实现Atlas官方实现的Python图片预处理。
一开始按照Python脚本里面的步骤逐一用opencv实现,但是实现到最后一个transpose时,opencv没有相应的操作函数。于是再次查找资料,发现了opencv自带一个类似的处理函数cv::dnn::blobFromImage,用于将图片数据转换成NCHW顺序的四维矩阵。
https://www.zhihu.com/question/400627328
https://www.cnblogs.com/sysuzyq/p/6824926.html
Qt+OpenCV+Atlas的使用

用该函数后得到一个四维矩阵。
Qt+OpenCV+Atlas的使用

访问该矩阵的方法如下
https://blog.****.net/fenglan8764/article/details/100744239

至此,还有一个问题需要解决。caffe使用的blob的类型是float16类型,是一个非标准类型;而opencv这边得到的blob是float32的,不一样,所以需要用cv::float16_t转换一下。
Qt+OpenCV+Atlas的使用

最后得到一个和Atlas官方一样长度的数组。
301056 = 1x3x224x224x2,其中最后一个2是指float16所占的字节数。
Qt+OpenCV+Atlas的使用
通过将opencv得出的数据与Atals官方得出的数据进行简单比较,发现不完全一样,但是数据较为接近。