У меня есть DLL на основе openCv, которая подключается к камере. Затем я вызываю объект cv::mat в приложение C# и отображаю изображение как растровое изображение в объекте изображения. Это работает, но изображение иногда «глючит», показывая вспышки линий, статические и всплывающие окна каждые несколько секунд.
Есть ли способ проверить, действительно ли растровое изображение, прежде чем отображать его? Когда я показываю изображение в dll, используя cv::imshow, оно выглядит нормально.
Код у меня есть:
в С++ dll:
__declspec(dllexport) uchar* getArucoFrame(void)
{
cv::Mat OriginalImg = returnLeftFrame(); // calls the frame from where the camera thread stores it.
cv::Mat tmp;
cv::cvtColor(OriginalImg, tmp, CV_BGRA2BGR);
//if I cv::imshow the Mat here, it looks good.
return tmp.data;
}
на стороне С#:
//on a button
threadImageShow = new Thread(imageShow);
threadImageShow.Start();
//show image frame in box
private void imageShow()
{
while(true)
{
IntPtr ptr = getArucoFrame();
if (pictureBoxFrame.Image != null)
{
pictureBoxFrame.Image.Dispose();
}
Bitmap a = new Bitmap(640, 360, 3 * 640, PixelFormat.Format24bppRgb, ptr);
pictureBoxFrame.Image = a;
Thread.Sleep(20);
}
}
//вызов dll
[DllImport("Vector.dll", CallingConvention = CallingConvention.Cdecl)]
public static extern IntPtr getArucoFrame();
Поскольку изображение выглядит хорошо в dll и глючит в окне изображения, у меня возникают проблемы с его отладкой. Любая помощь очень ценится. Спасибо.