Я пытаюсь создать многоканальную матрицу из нескольких других многоканальных матриц. Функция, предоставляемая OpenCV cv::merge()
, состоит в объединении нескольких одноканальных матриц в одну. При использовании для объединения многоканальных матриц это дает неполный / неправильный результат.
Мой подход к этой проблеме:
std::vector<cv::Mat> inputMats; // vector of BGR matrices (3 channels each)
std::vector<cv::Mat> splitMats;
for (const auto& mat : matrices)
{
std::vector<cv::Mat> channels;
cv::split(mat, channels);
splitMats.insert(splitMats.end(), channels.begin(), channels.end());
}
cv::Mat result;
cv::merge(splitMats, result);
Этот подход слишком медленный, хотя. Чтобы объединить 6 цветовых матриц в одну 18-канальную матрицу (Intel Core i5 3,2 ГГц), требуется 27 мс. Есть ли другой подход?