日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

MFC+opencv 显示mat图像

發布時間:2023/12/18 编程问答 31 豆豆
生活随笔 收集整理的這篇文章主要介紹了 MFC+opencv 显示mat图像 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

VS2015+opencv3.0 MFC顯示圖片中方法三在使用時,

  • 只能顯示彩色圖像,灰度圖像顯示有問題,經查找,是沒有設置圖像調色板的原因
  • 圖片控件寬度不為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图像的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。