请问在识别图片时,怎么把图片转成一维数组?数据结构是什么样的?
收藏
在使用c++ 学习目标识别时,用opencv拿到图片后,怎么把一张图片转成一维float类型数组?数据结构是什么样的?为啥我在官网上居然找不到相关的信息?
0
收藏
请登录后评论
已将您的问题提到issue中,请耐心等待
#include
#include
#include
#include
namespace ImageUtils {
// imagenet preprocessing function
cv::Mat preprocess_image(cv::Mat image) {
cv::Mat float_image;
image.convertTo(float_image, CV_32FC3);
float mean[] = {103.939, 116.779, 123.68};
for (int y = 0; y < float_image.cols; ++y) {
for (int x = 0; x < float_image.rows; ++x) {
cv::Vec3f pix_value = float_image.at(y, x);
float red = pix_value.val[0] - mean[0];
float green = pix_value.val[1] - mean[1];
float blue = pix_value.val[2] - mean[2];
float_image.at(y, x) = cv::Vec3f(blue, green, red);
}
}
return float_image;
}
std::vector cv_mat_to_float_array(cv::Mat float_image) {
std::vector array;
array.assign((float*)float_image.datastart, (float*)float_image.dataend);
return array;
}
} // namespace ImageUtils
std::vector preprocess_image(cv::Mat image) {
cv::Mat resized_image;
cv::Mat rgb_image;
cv::Size model_size = cv::Size(224, 224); // for example, 1, 3, 224, 224
cv::resize(image, resized_image, model_size);
cv::cvtColor(resized_image, rgb_image, cv::COLOR_BGR2RGB);
cv::Mat float_image = ImageUtils::preprocess_image(rgb_image);
std::vector input_vector =
ImageUtils::cv_mat_to_float_array(float_image);
return input_vector;
}
其中图像内容cv::Mat转成一维数组vector
图像内容cv::Mat转成一维数组vector
会涉及到一些opencv预处理。试试这个满足需求吗 https://gist.github.com/zhangjun/3873ecb8a4b3e6782731eaf4f556c42f
非常感谢~!