MFC+OPENCV+显示MAT类型图像

MFC显示图像到界面,可以用链接中的DrawMatToPic,有时会出现IplImage*类型转换问题,因为用opencv做后续图像处理,所以统一使用Mat类型,可以showMat()函数进行显示。在MFC中嵌入opencv窗口”view”后,其他地方调用imshow(”view“,图像名)。

int Ctest2Dlg::ShowMat(cv::Mat img, HWND hWndDisplay)
{
    if (img.channels()<3)`
    {
        return -1;
    }

    //构造将要显示的Mat版本图片
    RECT rect;
    ::GetClientRect(hWndDisplay, &rect);
    cv::Mat imgShow(abs(rect.top - rect.bottom), abs(rect.right - rect.left), CV_8UC3);
    resize(img, imgShow, imgShow.size());

    //在控件上显示要用到的CImage类图片
    ATL::CImage CI;
    int w = imgShow.cols;//宽  
    int h = imgShow.rows;//高  
    int channels = imgShow.channels();//通道数  
    CI.Create(w, h, 8 * channels);

    //CI像素的复制
    uchar *pS;
    uchar *pImg = (uchar *)CI.GetBits();//得到CImage数据区地址  
    int step = CI.GetPitch();
    for (int i = 0; i<h; i++)
    {
        pS = imgShow.ptr<uchar>(i);
        for (int j = 0; j<w; j++)
        {
            for (int k = 0; k<3; k++)
                *(pImg + i*step + j * 3 + k) = pS[j * 3 + k];
            //注意到这里的step不用乘以3  
        }
    }

    // TODO: 在此添加额外的初始化代码
    //在控件显示图片
    HDC dc;
    dc = ::GetDC(hWndDisplay);
    CI.Draw(dc, 0, 0);
    ::ReleaseDC(hWndDisplay, dc);
    CI.Destroy();
    return 0;
}
--------------------- 

原文:https://blog.csdn.net/qq_36509928/article/details/82141970 
 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值