bitmap mfc 加载图片_Opencv在MFC中显示图片

本文介绍了如何在MFC应用中利用OpenCV解码图片并显示,同时解决了图片大小调整和窗口重绘时的闪烁问题。通过将OpenCV的Mat转换为CImage,然后使用双缓存技术来消除闪烁。
摘要由CSDN通过智能技术生成

本文介绍在MFC框架下,使用opencv的解码函数对图片进行解码,并最终显示到窗口。在此过程中,遇到了图片显示时的大小问题,以及闪烁问题,本文将一一解决。

【显示图片】

1. 在CImageProcessView::OnDraw(CDC* pDC) 中写绘制图片的代码

我们已经打开图片时,利用opencv对图片文件进行了解码,图像数据已经在src_image中持有,现在需要把src_image中的数据绘制到窗口。

void CImageProcessView::OnDraw(CDC* pDC)

{

CImageProcessDoc* pDoc = GetDocument();

ASSERT_VALID(pDoc);

if (!pDoc)

return;

// TODO: add draw code for native data here

Mat & image = pDoc->src_image;

}

2. 将Mat转化成CImage

Mat是表示图像数据的一个矩阵,它不能直接绘制到窗口DC,通过google,我发现atl的一个类CImage有绘制到DC的方法,所以只需要把Mat在显示之前先转化成CImage,代码如下:

void ImageUtility::MatToCImage( Mat &mat, CImage &cImage)

{

int width = mat.cols;

int height = mat.rows;

int channels = mat.channels();

cImage.Destroy();

cImage.Create(width,

height,

8*channels );

uchar* ps;

uchar* pimg = (uchar*)cImage.GetBits();

int step = cImage.GetPitch();

for (int i = 0; i < height; ++i)

{

ps = (mat.ptr(i));

for ( int j = 0; j < width; ++

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值