Я работаю с библиотекой arm compute link , чтобы преобразовать приложение opencv в более эффективную базу кода.
Я хотел бы импортировать данные из мата opencv, который я 'мы сделали успешно, выполнив this .
arm_compute::Image matACL;
matACL.allocator()->init(arm_compute::TensorInfo(mat.cols, mat.rows, arm_compute::Format::U8)); // Initialise tensor's dimensions
matACL.allocator()->import_memory(arm_compute::Memory(mat.data)); //Allocate the image without any padding.
//matACL.allocator()->import_memory(arm_compute::Memory(new cvMatData(mat.data)));
. Осторожно, версии ACL 18.05 и выше нуждаются в реализованном интерфейсе памяти, для которого я создал gist .Это закомментированная строка выше.
Я могу запускать различные операции над изображением (например, с порогом или гауссом), и я вижу правильный вывод в окне opencv, но всякий раз, когда я использую детектор контуров, я получаюиспортил выходное изображение.Я недавно выпустил github , но они также не смогли найти решение.
Я реализовал Canny Edge неон, как это сделано в файле NECannyEdge.cpp, чтобы лучшепонять, что происходит.Я копирую данные результата в OpenCV Mat и сохраняю указатель на него следующим образом.
Вот как я конвертирую результат обратно в OpenCV Mat:
ptr = (unsigned char*)malloc(mat.cols*mat.rows*sizeof(unsigned char));
for(unsigned int z = 0 ; z < 0 ; ++z)
{
for (unsigned int y = 0; y < mat.rows; ++y)
{
memcpy(ptr + z * (mat.cols * mat.rows) + y * mat.cols, matACL.buffer() +
matACL.info()->offset_element_in_bytes(Coordinates(0, y, z)), mat.cols *
sizeof(unsigned char));
}
}
иальтернатива:
Window output_window;
output_window.use_tensor_dimensions(shape, Window::DimY);
Iterator output_it(&matACL, output_window);
execute_window_loop(output_window,
[&](const Coordinates & id)
{
memcpy(ptr + id.z() * (mat.cols * mat.rows) + id.y() * mat.cols, output_it.ptr(), mat.cols * sizeof(unsigned char));
}, output_it);
На изображении иногда показан верный результат обработки, но в большинстве случаев это случайные, возможно, незаконченные данные.
![Output Image](https://i.stack.imgur.com/QhMhA.png)
Я проверил, может ли это быть состояние гонки, но реализация должна быть однопоточной, и я не могу понять, где проблема.У кого-нибудь есть идея?
Как я могу успешно использовать данные из изображения opencv для использования в детекторе краев Canny библиотеки вычислений arm?Может быть, есть какие-то шаги при импорте, которые я пропустил?
Спасибо, привет