Я использую LabView для получения изображения с USB-камеры, а затем хочу обработать это изображение с помощью функций openCV через файл dll (который используется в функции вызова VI). Теперь я хочу преобразовать формат изображения, который создает Labview, чтобы обработать его с помощью opencv. Как я могу это сделать?
Вы можете использовать IMAQ GetImagePixelPtr, чтобы получить указатель на изображение в LabView.
В DLL, вы должны быть в состоянии получить это так:
int function(unsigned __int8 *LVImagePointer, int lineWidth, int height, int width)
{
Mat image(height, width, CV_8UC1, LVImagePointer, lineWidth);
...
}
Использование любого из доступных наборов инструментов. Скажи это: https://www.ehe-lab.com/OpenCV_Wrapper.html
Я обнаружил, что трудно предотвратить утечку памяти. Я предлагаю вам использовать инструментарий: http://ms-consultants.de/index.php/software/msc-image-processing/37-msc-image-processing-eng
Они также предлагают реализовать новые функции, если вам нужно больше.
Я обнаружил, что это легко использовать IMAQ ImageToArray
за IMAGE
а также IMAQ GetImageSize
за IMAGE_HEIGHT
а также IMAGE_WIDTH
и передать их в DLL. Они называются так:
cv::Mat src = cv::Mat(IMAGE_HEIGHT, IMAGE_WIDTH, CV_8UC1, IMAGE);
Преимущество в том, что все операции на src
можно увидеть в Labview, преобразовав массив, который вы получаете из DLL, обратно в изображение.