無論什麼圖片格式,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函數對窗體進行刷新,也就是對客戶窗口進行刷新,此時圖像便顯示在窗口上