在MFC中使用OpenCV地方法.docVIP

  • 4
  • 0
  • 约2万字
  • 约 16页
  • 2018-11-07 发布于江苏
  • 举报
在MFC中使用OpenCV地方法

在MFC中使用OpenCV PAGE 1 在MFC中使用OpenCV 演示程序CVMFC 本程序是在 MFC 中使用 OpenCV 的演示程序,由3部分组成。 一、Windows 下用 MFC 编制的程序框架 采用设备无关位图DIB实现Windows多文档模式下图像的显示,实现显示的关键函数StretchDIBits的原型如下: int StretchDIBits( HDC hdc, // 显示设备句柄 int XDest, // 目标矩形区域左上角X坐标 int YDest, // 目标矩形区域左上角Y坐标 int nDestWidth, // 目标矩形区域宽度 int nDestHeight, // 目标矩形区域高度 int XSrc, // 源矩形区域左上角X坐标 int YSrc, // 源矩形区域左上角Y坐标 int nSrcWidth, // 源矩形区域宽度 int nSrcHeight, // 源矩形区域高度 CONST VOID *lpBits, // 位图的像素存放首地址 CONST BITMAPINFO *lpBitsInfo, // 位图信息存放地址 UINT iUsage, // 位图中的颜色类型,RGB模式用DIB_RGB_COLORS DWORD dwRop // 像素操作码,简单复制用SRCCOPY ); 由于OpenCV中的位图结构中的像素数据与DIB中的像素具有相同的存储结构,见表1中的像素部分。所以,只要为它构造一个DIB的位图信息就可以调用API函数StretchDIBits实现它的显示了。 表1 DIB位图参数与IplImage结构参数 参 数 DIB (MFC) IplImage (OpenCV) 宽 度 biWidth width 高 度 biHeight height 像素位数 biBitCount (1,4,8,16,24,32) = depth*nChannels depth (8,16,32,64) 通道数 nChannels (1,2,3,4) (单通道位图) 调色板单元数 2biBitCount (2, 16, 256) 二值图像显示为灰阶图像 256色彩色图像显示为真彩色图像 位图坐标原点 底-左 origin (0 顶-左,1 底-左) 像素分量存放方式 交叉存取 (按像素为单位存放) 0 交叉存取,1 位平面方式 对齐方式 (行像素数据凑整) 4字节对齐 4字节对齐或8字节对齐 每行字节数 (biWidth*biBitCount+31)/32*4 widthStep 像素字节数 ((biWidth*biBitCount+31)/32*4)* biHeight imageSize 像素存放地址 BYTE* pBits char* imageData 感兴趣区域 roi 表中正体字母部分表示相同的参数,粗体字母表示参数部分相同时的交集,斜体加下划线表示结构特有的参数。 位图的宽度、高度、像素存放首地址、每行字节数、像素总字节数等5个参数在两种结构中相同。 像素位数、通道数、坐标原点位置、像素分量存放方式、对齐方式等5个参数在两种结构中部分相同,使用时可以取其交集,表中用粗体字表示。 有2个参数是两种位图各自独有的,感兴趣区域为IplImage结构所独有,调色板单元为DIB所独有。 从表1中可以看出,除了高精度图像(位深度16,32,64)外,这两种位图结构在图像处理的绝大部分应用中可以通用。 从以上比较中也可看出,IplImage结构适用于高精度处理,并且可以限制处理的区域;而DIB适用于Windows图形操作,并且可以存储低位数图像文件,如每像素一位的二值图像与像素8位的索引图像等。 另一种实现MFC的方法是采用CvvImage类,它有一个特点,就是其成员函数DrawToHDC可将位图全部经缩放后显示到窗口中。这样,虽然能够察看全图,但当位图与窗口的长宽比不一致时会造成图像失真。而采用DIB实现的显示比例可选择为1:1,图像显示没有经过缩放,显示画面按窗口大小

文档评论(0)

1亿VIP精品文档

相关文档