Как конвертировать cv :: Mat в void * - PullRequest
1 голос
/ 05 апреля 2020

Я делаю DLL на C ++ для использования в LabView, получаю RGB-изображение и преобразую его в оттенки серого. Мой код следующий:

DLLIMPORT void function (void* ImageSrc, void* ImageF)
{
    cv::Mat greyMat, colorMat;
    colorMat = cv::Mat(488, 648, CV_8U, (uchar*)ImageSrc);
    greyMat = (colorMat, CV_LOAD_IMAGE_GRAYSCALE);


}

ImageF будет серым изображением, и я не знаю, как скопировать grayMat в ImageF.

1 Ответ

0 голосов
/ 05 апреля 2020

Согласно следующей записи это должно быть очень просто:

DLLIMPORT void function(void* ImageSrc, void* ImageF)
{
    cv::Mat colorMat = cv::Mat(488, 648, CV_8UC3, ImageSrc);
    cv::Mat greyMat = cv::Mat(488, 648, CV_8UC1, ImageF);
    cv::cvtColor(colorMat, greyMat, cv::COLOR_RGB2GRAY); //You may also try cv::COLOR_BGR2GRAY
}
  • ImageSrc - это RGB, поэтому он имеет 3 цветовых канала, и тип должен быть CV_8UC3, а не CV_8U.
  • Создайте серый cv::Mat с ImageF в качестве аргумента data (и введите CV_8UC1).
    Существует несколько вариантов создания cv:Mat объектов (перегрузка конструктора).
    Приведенный выше параметр устанавливает ImageF для указания данных изображения.
  • Выполнить cv::cvtColor с типом преобразования cv::COLOR_RGB2GRAY, для преобразования из RGB в серый.

Примечание:
Разрешение выходного изображения (684x488) и тип (серый цвет с одним байтом на пиксель) должны быть определены в LabView перед выполнением функция.
Информация о размере и типе не передается от function до LabView.
Только * необработанные данные изображения передаются в LabView.

Пожалуйста, дайте мне знать, если это работает, потому что у меня нет возможности проверить это.

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