Можно импортировать данные изображения в Simulink® модель как матричные данные или как изображение с Simulink.ImageType
тип данных. Image To Matrix и блоки Matrix To Image преобразуют между данными изображения Simulink и матричными данными. Используйте эти блоки, чтобы интегрировать данные изображения Simulink в алгоритм обработки изображений, который содержит блоки, которые не поддерживают данные изображения Simulink.
Получить доступ к пути к папке в качестве примера, в MATLAB® командная строка, введите:
OpenCVSimulinkExamples;
Скопируйте модель ex_imagetypes
в качестве примера к перезаписываемому местоположению папки.
Модель ex_imagetypes
содержит два входных изображения, coins
и peppers_bw
В виде матриц. Блок MATLAB function contrast_histeq
преобразует оригинальные изображения в высококонтрастные изображения. Блок MATLAB Function работает с матричными данными только. Блок Image To Matrix преобразует данные изображения от блока switch в матрицу, чтобы позволить блоку MATLAB Function обработать его.
На панели инструментов Simulink, во вкладке Simulation, выбирают Run, чтобы симулировать модель. Блок Video Viewer Video Viewer Original
отображает оригинальные изображения, импортированные в модель и Video Viewer High Contrast
отображает высоко контрастировавшие изображения после обработки изображений.
Сгенерировать Код С++:
На вкладке Apps на панели инструментов Simulink выберите Simulink Coder. На вкладке C++ Code, в списке Settings, выбирают C/C++ Code generation settings, чтобы открыть диалоговое окно Configuration Parameters и проверить эти настройки:
В панели Code Generation, под Target selection, Language установлен в C++
.
В том же разделе Language standard установлен в C++11 (ISO)
.
Нажмите кнопку Build и сгенерируйте код.
Чтобы просмотреть сгенерированный код, на панели инструментов Simulink, нажимают кнопку Open Report.
В ex_imagetype.h
файл, генератор кода объявляет Выходные порты корневого уровня Out_normmal
как член класса C++ images::datatypes::Image
реализованный MathWorks® и Out_highContrast
как матричное изображение:
/* External outputs (root outports fed by signals with default storage) */ struct ExtY_ex_imagetypes_T { images::datatypes::Image Out_normal; /* '<Root>/Out_normal' */ uint8_T Out_highContrast[73800]; /* '<Root>/Out_highContrast' */ };
Генератор кода инициализирует сигналы Simulink.ImageType
тип данных в ex_imagetypes.c
файл:
/* Model initialize function */ void ex_imagetypes::initialize() { /* Registration code */ constructImage(&ex_imagetypes_B.toImage, 1U, 246U, 300U, images::datatypes:: ColorFormat::Grayscale, images::datatypes::Layout:: ColumnMajorPlanar, images::datatypes::ClassUnderlying::Uint8); constructImage(&ex_imagetypes_Y.Out_normal, 1U, 246U, 300U, images::datatypes:: ColorFormat::Grayscale, images::datatypes::Layout:: ColumnMajorPlanar, images::datatypes::ClassUnderlying::Uint8); ... }
Это - код для блока Matrix To Image:
/* ToImage: '<S2>/toImage' incorporates: * Constant: '<Root>/coins' * Outport: '<Root>/Out_normal' */ imgData = imageGetDataFcn(&ex_imagetypes_Y.Out_normal); inPtr = &ex_imagetypes_ConstP.coins_Value[0]; std::memcpy(imgData, inPtr, sizeof(uint8_T) * 73800U);
Это - код для блока Image To Matrix:
/* FromImage: '<S1>/fromImage' incorporates: * Outport: '<Root>/Out_normal' */ tmp_3 = ex_imagetypes_Y.Out_normal; imgData = imageGetDataFcn(&tmp_3); std::memcpy(&ex_imagetypes_B.fromImage[0], imgData, sizeof(uint8_T) * 73800U);
Когда модель содержит сигналы Simulink.ImageType
тип данных, генератор кода производит дополнительные совместно использованные служебные файлы. Эти файлы объявляют и задают утилиты для построения, разрушают и возвращают информацию о meta атрибутах изображений:
image_type.h
image_type.cpp
Matrix To Image | Image To Matrix | Simulink.ImageType