MFC+opencv 显示mat图像
2016-11-10 11:19
543 查看
VS2015+opencv3.0 MFC显示图片中方法三在使用时,
只能显示彩色图像,灰度图像显示有问题,经查找,是没有设置图像调色板的原因
图片控件宽度不为4的倍数 显示错误, 修改
代码
来张效果图 (虽然lenna是经典,但我还是更喜欢胖迪^-^)
只能显示彩色图像,灰度图像显示有问题,经查找,是没有设置图像调色板的原因
图片控件宽度不为4的倍数 显示错误, 修改
代码
/***************************************************** * * 函数名称: void DrawcvMat(cv::Mat m_cvImg, UINT ID) * 函数功能: 在picture control中显示图像,设置Freame或者rectangle都可以 * * ****************************************************/ void CMFC_showImageDemoDlg::DrawcvMat(cv::Mat m_cvImg, UINT ID) { cv::Mat img; CRect rect; GetDlgItem(ID)->GetClientRect(&rect); if (rect.Width()%4 != 0) { rect.SetRect(rect.left, rect.top, rect.left + (rect.Width() + 3) / 4 * 4, rect.bottom); //调整图像宽度为4的倍数 GetDlgItem(ID)->SetWindowPos(NULL, rect.left, rect.top, rect.Width(), rect.Height(), SWP_NOMOVE); } cv::Rect dst(rect.left, rect.top, rect.right, rect.bottom); cv::resize(m_cvImg, img, cv::Size(rect.Width(), rect.Height())); //使图像适应控件大小 unsigned int m_buffer[sizeof(BITMAPINFOHEADER) + sizeof(RGBQUAD)*256]; BITMAPINFO* m_bmi = (BITMAPINFO*) m_buffer; BITMAPINFOHEADER* m_bmih = &(m_bmi->bmiHeader); memset(m_bmih, 0, sizeof(*m_bmih)); m_bmih->biSize = sizeof(BITMAPINFOHEADER); m_bmih->biWidth = img.cols; //必须为4的倍数 m_bmih->biHeight = -img.rows; //在自下而上的位图中 高度为负 m_bmih->biPlanes = 1; m_bmih->biCompression = BI_RGB; m_bmih->biBitCount = 8 * img.channels(); if (img.channels() == 1) //当图像为灰度图像时需要设置调色板颜色 { for (int i = 0; i < 256; i++) { m_bmi->bmiColors[i].rgbBlue = i; m_bmi->bmiColors[i].rgbGreen = i; m_bmi->bmiColors[i].rgbRed = i; m_bmi->bmiColors[i].rgbReserved = 0; } } CDC *pDC = GetDlgItem(ID)->GetDC(); ::StretchDIBits( pDC->GetSafeHdc(), 0, 0, rect.Width(), rect.Height(), 0, 0, rect.Width(), rect.Height(), img.data, (BITMAPINFO*) m_bmi, DIB_RGB_COLORS, SRCCOPY ); ReleaseDC(pDC); }
来张效果图 (虽然lenna是经典,但我还是更喜欢胖迪^-^)
相关文章推荐
- 在MFC中显示OpenCV的Mat图像矩阵 ShowMatImgToWnd(GetDlgItem(IDC_ShowImg) , matFrame);
- 在MFC中显示OpenCV的Mat格式图像和打开摄像头
- OpenCV+MFC快速应用:如何在MFC中显示Mat图像
- 在MFC中如何显示OpenCV的图像Mat
- OPENCV Mat图像在MFC PictureControl显示
- opencv的Mat图像显示在MFC控件中
- MFC:CImage显示OpenCV:Mat矩阵图像
- MFC:CImage显示OpenCV:Mat矩阵图像
- 在MFC图像控件上显示opencv Mat格式图片
- 利用GDI+在MFC中显示OpenCV中的Mat图像的关键点
- MFC:CImage显示OpenCV:Mat矩阵图像
- 彻底解决显示Opencv中Mat图像到Mfc窗口问题
- MFC:CImage显示OpenCV:Mat矩阵图像
- MFC:CImage显示OpenCV:Mat矩阵图像
- OpenCV学习笔记(9)利用MFC的Picture控件显示图像+播放视频和捕获摄像头画面
- OpenCV Mat图像颜色通道分离(split)合成(merge),各通道合图显示
- 在MFC控件中显示opencv库中的图像或者视频
- OpenCV 利用MFC的Picture控件显示和处理图像
- 继承opencv的CImage类在MFC的单文档中编辑并显示图像的方法
- OpenCV学习笔记 利用MFC的Picture控件显示图像+播放视频和捕获摄像头画面 .