Có rất nhiều bạn đang học OpenCV kết hợp với MFC (Visual Studio - các ứng dụng kiểu Dialog based) nhưng đang lay hoay để hiển thị hình ảnh kiểu IplImage lên dialog. Bài viết này sẽ giúp các bạn giải quyết điều này:
IplImage* m_image;
.................
Tạo sự kiện OnPaint() và thực hiện các lệnh sau:
Chú ý: ảnh m_image được lấy từ camera, webcam, ảnh....Nếu bạn nào đã đọc bài của tôi về sử dụng Visual Studio + OpenCV + DirectShow thì sẽ dễ dàng đọc m_image từ camera. Nói chung là có nhiều cách để lấy m_image.
IplImage* m_image;
.................
Tạo sự kiện OnPaint() và thực hiện các lệnh sau:
Code:
void CKlinkImageToolKit::OnPaint()
{
CPaintDC dc(this);
if(m_image)
{
//Chuyển hình ảnh từ kiểu IplImage sang Bitmap của Window
BITMAPINFOHEADER* bmih = (BITMAPINFOHEADER*) new char[sizeof(BITMAPINFOHEADER)];
bmih->biSize = sizeof(BITMAPINFOHEADER);
bmih->biWidth = (long)m_image->width;
bmih->biHeight = (long)m_image->height;
bmih->biPlanes = 1;
bmih->biBitCount = 24;
bmih->biCompression = BI_RGB;
bmih->biClrUsed = 0;
IplImage* dibish = NULL;
dibish = cvCloneImage(m_image);
//Hiển thị hình ảnh lên window
::SetDIBitsToDevice(picDC->GetSafeHdc()/*dc.GetSafeHdc()*/, 0, 0, (DWORD)bmih->biWidth, (DWORD)bmih->biHeight,
0,0,0,(UINT)bmih->biHeight, dibish->imageData, (BITMAPINFO*)bmih, DIB_RGB_COLORS );
cvReleaseImage(&dibish);
delete bmih;
}
}

Comment