无论什么图片格式,opencv最终都是以位图形式进行图片显示,即以bmp图像格式进行图像显示,bmp图像由四部分组成:位图文件头、文图信息头、颜色表、位图数据。显示中的一个重要步骤就是将加载进来的Mat图像转换成bmp格式。下面就源码展开,看看显示过程,粘贴代码如下:
跟踪源码,可以发现最终显示函数仍旧是cvShowImage函数,继续跟踪下去,其源代码如下:
Line1193,根据读取到的图像信息进行位图数据结构相关成员进行赋值
Line1195,CreateDIBSection函数创建位图,其中dst_ptr指针指向该位图数据区域
Line1199,cvInitMatHeader函数对dst和dst_ptr进行内存区域关联,数据区域共享
Line1201,cvConvertImage函数已将原始图像cvMat类型变量image的相关数据拷贝到dst中了,也就相当dst_ptr指向的内存有位图的数据了
Line1206,InvaliddateRect函数对窗体进行刷新,也就是对客户窗口进行刷新,此时图像便显示在窗口上