Тулбокс поддерживает спецификацию видимых областей (КОРОЛИ) в обоих программных и аппаратных обеспечениях. Следующие разделы предоставляют больше информации.
При использовании программного обеспечения ROI пользователь тулбокса устанавливает размерности ROI в свойстве ROIPosition
. Устройство возвращает целый фрейм изображения. Ваш адаптер задает размерности ROI, когда он создает объект Frame группировать данные изображения.
Пользователи устанавливают значение свойства ROIPosition
задать ROI. Пользователи задают значение как четырехэлементный вектор в форме:
[Xoffset Yoffset Width Height]
x-и y-смещения задают положение ROI относительно левого верхнего угла фрейма изображения. Для получения дополнительной информации об этом свойстве, см. документацию Image Acquisition Toolbox™.
Чтобы поддержать программное обеспечение ROI, ваш адаптер должен проверять значение свойства ROIposition
прежде, чем создать объект кадра, потому что необходимо задать размерности ROI, когда вы создаете кадр. Это обычно делается в функциях startCapture()
или openDevice()
.
В вашем цикле приобретения кадра вставьте следующий вызов функции IAdaptor getROI()
. Затем используйте значения ширины и высоты ROI, когда вы создадите объект IAdaptorFrame
, а не высоту полного образа и ширину, возвращенную устройством.
Вы используете ширину ROI и высоту, когда вы создаете кадр, но вы используете ширину полного образа и высоту, когда вы копируете данные изображения с буфера в объект кадра.
Следующее является версией цикла isSendFrame()
в функции потока приобретения, которая проверяет ROI. Обратите внимание на то, что вы вызываете функцию getROI()
, чтобы получить значения ROI, и затем использовать значения ширины и высоты в вызове makeFrame()
и смещений от источника в вызове setImage()
.
if (adaptor->isSendFrame()) { // Get ROI information. int roiOriginX, roiOriginY, roiWidth, roiHeight; adaptor->getROI(roiOriginX, roiOriginY, roiWidth, roiHeight); // Get frame type & dimensions imaqkit::frametypes::FRAMETYPE frameType = adaptor->getFrameType(); int imWidth = adaptor->getMaxWidth(); int imHeight = adaptor->getMaxHeight(); // Create a frame object imaqkit::IAdaptorFrame* frame = adaptor->getEngine()->makeFrame(frameType, roiWidth, // ROI width roiHeight); // ROI height // Copy data from buffer into frame object frame->setImage(imBuffer, imWidth, // Full image width imHeight, // Full image height roiOriginX, // ROI origin roiOriginY); // ROI origin // Set image's timestamp frame->setTime(imaqkit::getCurrentTime()); // Send frame object to engine. adaptor->getEngine()->receiveFrame(frame); } // if isSendFrame()
Для аппаратного ROI пользователь задает ROI на устройстве. Устройство возвращает только данные в заданном ROI.
Чтобы реализовать аппаратный ROI, необходимо перегрузить и getROI()
IADAPTOR и функции членства setROI()
в реализации класса адаптера. По умолчанию, если объект IAdaptor
, функция членства getROI()
не перегружается, настройки ROI, будет обработан в программном обеспечении imaqkit::IEngine
.