Как скопировать данные изображения из BitmapSource (WPF) в cv :: Mat (OpenCV) в C ++ / CLI в другом потоке?

у меня есть BitmapSource созданный в потоке пользовательского интерфейса, и я хотел бы скопировать его данные пикселей в cv::Mat для обработки в отдельном потоке. Конечно, это работает, если я заверну код Dispatcher.Invoke звоните, но тогда я трачу время на синхронизацию.

int width = bitmapSource->PixelWidth;
int height = bitmapSource->PixelHeight;
int bytesPerPixel = bitmapSource->Format.BitsPerPixel / 8;
int stride = 4 * ((width * bytesPerPixel + 3) / 4);

...

cv::Mat &inputImage = wrapper.getRawImage();  // This is a refe
if (inputImage.size().width != width || inputImage.size().height != height || inputImage.type() != newType)
inputImage = cv::Mat::zeros(height, width, newType);
bitmapSource->CopyPixels(Int32Rect::Empty, IntPtr(inputImage.data), height*stride, stride);

Я пытался заморозить bitmapSource объект, и теперь он работает до вызова CopyPixels но при попытке скопировать его содержимое на inputImage данные. Если объект заморожен, почему CopyPixelsне можете скопировать замороженный буфер в другой буфер памяти? Любые идеи о том, как избежать вызова на главной теме? Есть ли другой растровый объект WPF, способный сделать это?

2

Решение

Вы можете обратиться к Вот, хотя строки кода написаны на C #, но это очень ценно для вас

0

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]