Я использую OpenCV для прямой трансляции с веб-камеры и после обнаружения лиц. Я изменяю их размеры так, чтобы отображалось только мое лицо.
Но проблема в том, что я делаю все это в C ++ Windows Forms и я хочу, чтобы он отображался в PictureBox
вместо того, чтобы получить отображение в OpenCV imshow()
окно.
я использую cv::Mat
поэтому у меня много проблем с отображением в картинке.
Я пытался преобразовать его в IplImage
но это тоже не сработало.
Кроме того, я пробовал Google, но я не мог получить рабочее решение. Я пробовал это в течение 3 дней.
Вот мой код для отображения:
face = getFace(frame);
cv::imshow("window",face);
где frame
а также face
являются cv::Mat
Вот функция C ++ CLR для рисования мата OpenCV в любом элементе управления Windows Form:
void DrawCVImage(System::Windows::Forms::Control^ control, cv::Mat& colorImage)
{
System::Drawing::Graphics^ graphics = control->CreateGraphics();
System::IntPtr ptr(colorImage.ptr());
System::Drawing::Bitmap^ b = gcnew System::Drawing::Bitmap(colorImage.cols,colorImage.rows,colorImage.step,System::Drawing::Imaging::PixelFormat::Format24bppRgb,ptr);
System::Drawing::RectangleF rect(0,0,control->Width,control->Height);
graphics->DrawImage(b,rect);
delete graphics;
}
Эта функция может рисовать только 8-битные 3-канальные изображения.
Попробуйте поэкспериментировать с пиксельным форматом растрового изображения для других типов изображений.
Других решений пока нет …