在MFC中使用OpenCV,控件显示图像

    在OpenCV与MFC例程中,用的是IPLImage对象。如果用Mat图像数据类型,在一些地方做下改变:

    1) 在创建LPBITMAPINFO文件头中,bits=workImg->depth*workImg->nChannels;改成bits=GetDepth(Image.depth())*Image.channels();
    其中,GetDepth(Image.depth())是图像位深度获取函数,因为Mat图像类型中,Image.depth()和IPlImage数据对象中的depth数值不同,Image.depth()只有0-6几种数
据情况,其中0,1代表8位,2,3代表16位,4,5代表32位,6代表64位图。应该写一个简单的函数描述其转换。GetDepth(Image.depth())中,if/else条件判断即可。

   2) SetStretchBltMode(hdc,nStretchMode)函数
    指定StretchBlt 和 StretchDIBits函数的伸缩模式。这种伸缩模式定义了Windows如何对伸缩过程中剔除的扫描线进行控制。对于VB窗体和控件,倘若在API绘图
过程中使用这个函数,建议恢复原来的StretchBlt模式。
    参数信息:
    hdc:场景的句柄 
    nStretchMode:
    STRETCH_ANDSCANS:默认设置。剔除的线段与剩下的线段进行AND运算。这个模式通常应用于采用了白色背景的单色位图,若用在彩色图像上非等比缩放时会产生
杂线条。
    STRETCH_DELETESCANS:剔除的线段被简单的清除。这个模式通常用于彩色位图。
    STRETCH_ORSCANS:剔除的线段与剩下的线段进行OR运算。这个模式通常应用于采用了白色背景的单色位图。
    STRETCH_HALFTONE:目标位图上的像素块被设为源位图上大致近似的块。这个模式要明显慢于其他模式。
    因此在做StretchDIBits 函数之前,若非等比缩放,针对彩色图像应该加上SetStretchBltMode(pDC->m_hDC,STRETCH_DELETESCANS)语句。
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值