OpenPose - создать массив из изображения - PullRequest
0 голосов
/ 20 ноября 2018

Я пытаюсь создать массив OpenPose (см. https://github.com/CMU-Perceptual-Computing-Lab/openpose/blob/73093e909a884f48df4f0b92d4d8ee6724954ba3/include/openpose/core/array.hpp) из изображения в C ++.

Я загружаю изображение с помощью

cv::Mat image = cv::imread(inputImageLocation, CV_LOAD_IMAGE_COLOR);

, который работает просто отлично. Так как я хочу вызвать другую функцию OpenCV, для которой требуется массив OpenCV в качестве входных данных, я должен преобразовать этот cv::Mat объект. Я использовал setFrom(const cv::Mat& cvMat);:

// Convert Mat to float.
image.convertTo(image, CV_32F);
// Create OpenCV Array from cv::Mat.
op::Array<float> res = op::Array<float>();
res.setFrom(image);

Это вызываетследующая ошибка:

Error:
Array<T>: T type and cvMat type are different.
Coming from:
- /openpose/src/openpose/core/array.cpp:setFrom():322
- /openpose/src/openpose/core/array.cpp:setFrom():331
terminate called after throwing an instance of 'std::runtime_error'

Не совсем уверен, почему cvMat и T должны быть здесь разными классами. Буду признателен за любые подсказки.


[Update] Инициализация массива res, похоже, этот путь ближе к правильному:

std::vector<int> dimSizes = std::vector<int>();
dimSizes.push_back(image.size().width);
dimSizes.push_back(image.size().height);
dimSizes.push_back(image.channels());

op::Array<float> res = op::Array<float>(dimSizes);
cv::Mat arrMat = res.getConstCvMat();

std::cout << image.rows << " vs. " << arrMat.rows << std::endl;
std::cout << image.cols << " vs. " << arrMat.cols << std::endl;
std::cout << image.size() << " vs. " << arrMat.size() << std::endl;
std::cout << image.type() << " vs. " << arrMat.type() << std::endl;
std::cout << image.channels() << " vs. " << arrMat.channels() << std::endl;

res.setFrom(image);

Это приводит к той же ошибке, но вывод здесь

20 vs. 20
20 vs. 20
[20 x 20] vs. [20 x 20]
21 vs. 21
3 vs. 3

Итак, OpenPose жалуется на то, что типы cvMat различны, но, очевидно, это не так - я не совсем уверен, что с этим делать.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...