【问题标题】:Preprocess Image for Opencv Dnn ClassificationOpencv Dnn 分类的预处理图像
【发布时间】:2021-07-23 11:39:35
【问题描述】:

我有一个用于分类的 onnx 模型。我正在尝试用 c++ 对一些图像进行分类。我正在阅读 onnx 文件并尝试使用 opencv dnn 库进行预测。

在使用 python 时,我正在使用 numpy 预处理图像。我正在创建 4d 维 numpy 数组并用图像填充它。代码如下。

blob = np.full((1, imgHeight, imgWidth, 3), 0)
blob[0, :, :, :] = img

通过这种方式,blob 的维度顺序将是 NHWC,我可以将其用于将模型提供给分类。但是当我使用 blobfromimage 函数时,它给了我不同的输出,比如 NCWH。我不能用这种方式喂模型。当我使用 reshape 函数改变维度顺序时,模型预测始终是同一类。

blobfromimage 函数代码如下。

blob = cv2.dnn.blobFromImage(img,1.0, dsize, (0,0,0), False, False, cv2.CV_32F)

我正在尝试执行此过程,该过程在 C++ 中取得了积极的结果,但我不能将 numpy 数组库用于 C++。经过长时间的解释,我的问题是,如何预处理图像并创建 NHWC cv::Mat 对象以将模型提供给分类。我为这个问题浪费了将近 1 周的时间。

【问题讨论】:

  • 我认为你应该创建一个原始数组并在那里复制图像数据。
  • 你能告诉我怎么做吗?

标签: python c++ numpy opencv


【解决方案1】:

也许你可以试试这个。

cv::Mat img = ... 

auto img_size = img.rows * img.cols * 3;
std::vector<unsigned char> array(1 * img_size, 0);

std::copy(img.data, img.data + img_size, array.data());

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-10-03
    • 1970-01-01
    • 2017-04-12
    • 2020-12-29
    • 1970-01-01
    • 1970-01-01
    • 2021-02-13
    • 1970-01-01
    相关资源
    最近更新 更多