博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
MFC+OPENCV+显示MAT类型图像
阅读量:4303 次
发布时间:2019-05-27

本文共 1090 字,大约阅读时间需要 3 分钟。

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 
 

你可能感兴趣的文章
CountDownLatch源码解析加流程图详解--AQS类注释翻译
查看>>
ES相关度评分
查看>>
我们一起做一个可以商用的springboot脚手架
查看>>
idea在搭建ssm框架时mybatis整合问题 无法找到mapper
查看>>
java设计基本原则----单一职责原则
查看>>
HashMap的实现
查看>>
互斥锁 synchronized分析
查看>>
java等待-通知机制 synchronized和waity()的使用实践
查看>>
win10 Docke安装mysql8.0
查看>>
docker 启动已经停止的容器
查看>>
order by 排序原理及性能优化
查看>>
Lock重入锁
查看>>
docker安装 rabbitMq
查看>>
git 常用命令 入门
查看>>
linux安装docker
查看>>
关闭selinx nginx无法使用代理
查看>>
shell 脚本部署项目
查看>>
spring cloud zuul网关上传大文件
查看>>
springboot+mybatis日志显示SQL
查看>>
工作流中文乱码问题解决
查看>>