Привет всем!
Вот, попытался сделать пример вывода видео на форму. И, думаю, получилось
Для того, что-бы скопировать IplImage в объект .NET типа Image, достаточно всего лишь
одной строки:
#include <opencv/cv.h>
#include <opencv/highgui.h>
...
using namespace System;
using namespace System::Windows::Forms;
using namespace System::Drawing::Imaging;
using namespace System::Drawing;
...
IplImage *iplImg;
...
// Копирование IplImage в объект .NET типа Image
Image ^image = gcnew Bitmap(iplImg->width, iplImg->height, iplImg->widthStep,
PixelFormat::Format24bppRgb, IntPtr(iplImg->imageData));
...
или, с использованием класса Mat:
cv::Mat imgMat;
// Копирование cv::Mat в объект .NET типа Image
Image ^img = gcnew Bitmap(imgMat.cols, imgMat.rows, imgMat.step,
PixelFormat::Format24bppRgb, IntPtr(imgMat.data));
Чтобы вывести изображение на компоненту PictureBox, достаточно следующей строки в
одном из методов вашей формы:
this->pictureBox1->Image = image;
Если вам нужен HBITMAP, то получить его можно следующим образом:
Bitmap ^image = gcnew Bitmap(iplImg->width, iplImg->height, iplImg->widthStep,
PixelFormat::Format24bppRgb, IntPtr(iplImg->imageData));
HBITMAP hb = (HBITMAP)image->GetHbitmap().ToPointer();
У меня вышеприведенные примеры отлично работают с OpenCV 2.2 в Visual Studio 2008/2010.
К сообщению прилагаю проект простого видео плеера, написанного с помощью OpenCV 2.2
в Visual Studio 2008. Он может воспроизводить все типы видео, которые берет OpenCV и
видео, захваченное с видеокамеры. Не судите строго за возможные несовершенства в коде
Просто, я старался, что бы были основные функции плеера.
Пояснения к проекту.
Компиляция:
Чтобы успешно скомпилировать проект, достаточно в опциях Visual Studio установить пути
на OpenCV в следующем виде:
%OPENCV_HOME%\include
и
%OPENCV_HOME%\lib
Например, так:
C:\OpenCV2.2\include
и
C:\OpenCV2.2\lib
Другое:
При создании проекта использовались следующие опции и установки.
.NET Framework 3.5. General/Common Language Runtime Support: Common Language Runtime Support (/clr) C/C++/Advanced/Disable Specific Warnings: 4996;4793 Linker/Input/Additional Dependencies:
opencv_core220d.lib
opencv_highgui220d.lib
opencv_imgproc220d.lib
opencv_objdetect220d.lib
Для версии Release: без "d" после 220. В компоненте PictureBox свойство SizeMode имеет значение Zoom, что позволяет
сохранить оригинальное соотношение сторон кадра. Для визуализации кадров используется Tick таймера.
При двойном щелчке по области отображения, происходит переход в полноэкранный режим и обратно.
Надеюсь, пример кому-нибудь пригодится VideoOnForm.zip