ImageWatch详细教程
image watch不僅僅只為opencv服務!
在使用OpenCV的過程中,經常在visual studio中使用image watch查看圖像。其實Image watch的功能非常強大, 不僅僅可以顯示Opencv 圖像數據,也可以顯示其他類型的圖像。 例如有一塊內存保存的是圖像數據,也可以將其顯示出來。例如:
#include "ippi.h" #include "ippcv.h"int main() {IppiSize size = {320,320 };int pitch = 0;Ipp16s *pSrc = ippiMalloc_16s_C1(size.width, size.height, &pitch);IppStatus status1 = ippiImageJaehne_16s_C1R(pSrc, pitch, size);ippifree(pSrc);return 0; }
其中顯示內存中的圖像數據操作為:@mem(pSrc,INT16,1,size.width,size.height,pitch)@mem(pSrc, INT16, 1, size.width,size.height, pitch)@mem(pSrc,INT16,1,size.width,size.height,pitch)
我們還可以對內存中的圖像進行二值化:
二值化操作為: @thresh(@mem(pSrc,INT16,1,size.width,size.height,pitch),0)@thresh(@mem(pSrc, INT16, 1, size.width,size.height, pitch), 0)@thresh(@mem(pSrc,INT16,1,size.width,size.height,pitch),0)
更多操作見后文圖像操作。
文章目錄
- 安裝(Installation)
- 基本操作(basic operation)
- 圖像列表(Image List )
- 圖像視圖器(Image Viewer)
- 圖像類型(Image Types)
- 像素格式(Pixel Formats)
- 圖像操作(Image Operators)
- 擴展(extensibility)
- 參考資料
- 歡迎關注個人公眾號
安裝(Installation)
Visual Studio 2012 以上版本。 并安裝Update1 和Update3。
下載Image Watch默認安裝即可。
為了使用混合模式調試,請確保沒有選中 Tools ->Options ->Debugging ->General ->Managed C++ Compatitibility Mode.
基本操作(basic operation)
- 第一次如何找到Image Watch:
在調試過程中中斷,然后選擇:視圖 -> 其他窗口 -> Image Watch 。
只要這樣操作一次之后,停止調試時 Image Watch 會自動消失,下次調試過程中會自動出現。
其實還是更簡單的方法:將鼠標??吭赾v::Mat變量上,單擊放大鏡即可,具體見后文。
在 image watch窗口的左上角,有 Locals和 Watch 兩個單選按鈕。
圖像列表中的每一項都有一個小方塊表示(藍色表示有效,灰色表示無效),對于有效的表達式:下面會一張縮略圖,圖片大小,像素格式和 類型。支持的像素格式和類型見后文。
選中一個圖像(D),就可以在右邊的圖像視圖中看到原圖(E區域)。圖像視圖支持放大縮小圖像(滾動鼠標滾輪),拖動圖像。在F區域顯示著當前的放大系數。當前位置坐標,位置處的像素值顯示在靠上的 H 區域。
在鼠標???Image Watch 有效的圖像變量時,會自動出現 J區域所示的相關信息。點擊放大鏡就可以在 Image Watch中顯示對應圖像。如果你不想去找或者找不到image watch 窗口,這是一種打開image watch 的簡易的途徑。
圖像列表(Image List )
如上圖,B區域所示就是Image List。在Locals 模式下image List是只讀的,在watch 模式下是可以編輯和增刪的。
image list的右鍵菜單
- Expand / Collapse all: 展開/收縮 列表
- Expand New Items: 展開新的列表項
- Large Thumbnails: 大縮略圖
- Atuo Maximize Contrast: 自動最大化對比圖
- 1-Channel Pseudo Color: 將灰度圖轉為偽彩色圖顯示
- 4-Channel Ignore Alpha: 忽略四通道圖的最后一個通道
- Add to Watch : 將選擇的圖像加入到 Watch 模式
- Add Address to Watch : 將圖像地址加入到Watch 模式下,在查看其他棧中的圖像時這是一個非常有用的功能。
- Dump to File:下載到文件; 支持PNG,JPG和BIN格式。如果使用BIN格式,就只能使用 image watch查看圖片,可以通過@file 操作符加載到watch中。
圖像視圖器(Image Viewer)
圖像視圖器(圖一的E區域)可以在較大的區域顯示圖像,支持放大縮小和查看單個像素的信息。
圖像視圖的右鍵菜單
- zoom to fit : 縮放圖片至適應窗口大小
- zoom to original size : 原始圖像大小
- Link Views : 所有相同大小的圖像共享一個視圖。這個比較好玩,也就是對相同大小的圖片, 可以切換圖片可以顯示同一個區域。你可以看到不同圖像的相同區域,方便查看和對比。
- Auto Maximize Contrast : 和 上一節image list中的功能一致。
- 1-Channel Pseudo Color: 和 上一節image list中的功能一致。
- 4-Channel Ignore Alpha: 和 上一節image list中的功能一致。
- Hexadecimal Display: 16進制顯示,設置顯示單個像素值的格式(圖一的H區域)
- Copy Pixel Address : 復制當前像素的內存地址。
圖像類型(Image Types)
IMAGE WATCH 以及內置支持以下C/C++ 圖像類型:
OpenCV:
- cv::Mat_<>
- cv::Mat
- CvMat
- _lpllmage
如果不是這些類型的圖像,是不是都不能使用Image Watch 顯示了呢?那 Image Watch 的通用性豈不是大打折扣。答案是否定的,可以說基本都可以顯示,有兩種方式:
像素格式(Pixel Formats)
像素格式包括單個通道的類型和通道格式。
image watch 支持以下通道類型(是內存中數據的類型):
- INT8, UINT8
- INT16, UINT16
- INT32
- FLOAT16
- FLOAT32
- FLOAT64
通道格式也就是通道的個數。最大支持512個通道。
一個格式字符串是與像素格式相關聯。它決定每個通道顯示渲染方式。包括如下:
- RG,UV
- RGB, BGR, YUV
- RGBA, BGRA
我們在使用OpenCV類型時并沒有指定格式,在這種情況下會使用默認的顏色映射(color mapping)規則去做顯示渲染。
顏色映射(Color Mapping)
image watch 使用一下兩個規則把像素值映射到顯示的顏色。
- 單通道圖:灰度圖(默認)或偽彩色(可以在視圖器中設置了)
- 雙通道圖:紅/綠
- 三通道圖:藍、綠、紅
- 四通道圖:藍、綠、紅、透明通道(默認),或者忽略透明通道(可以在視圖器中設置了)
- 大于四個通道的圖:取前三個通道為藍、綠、紅,忽略剩余通道。
- INT8: -128 … 127
- UINT8: 0 … 255
- INT16: -32,768 … 32,767
- UINT16: 0 … 65,535
- INT32:0 … 1。(由于INT32可以表示的范圍太大,這里任意截斷到了0到1,建議使用automatic contrast maximization自動最大化對比度顯示數據)
- FLOAT16::0 … 1
- FLOAT32::0 … 1
- FLOAT64::0 … 1
圖像操作(Image Operators)
來看image watch提供的騷操作。
iamge watch 提供了許多簡單的操作去幫助顯示圖像數據。為了區分C++操作符號,這些操作都以符號“@”開頭。操作列表:
- @band(img, number): 從圖像img中提取出某個通道的圖像,這個操作會保持輸入的數據類型。
- @thresh(img, threshold): 二值化圖像。(大于閾值為1,否則為0)
- @clamp(img,min,max): 截斷像素值到min和max之間。
- @abs(img): 像素值的絕對值圖像
- @scale(img,factor):使用縮放因子factor,縮放圖像
- @norm8(img):縮小255倍后的圖像(factor=1/255)
- @norm16(img):縮小65535倍后的圖像(factor=1/65535)
- @fliph(img),@flipv(img),@flipd(img): 水平翻轉,垂直翻轉,對角翻轉(轉置矩陣)。(保持輸入數據類型)
- @rot90(img),@rot180(img),@rot270(img): 旋轉90度,180度,270(保持輸入數據類型)
- @diff(img0,img1): 逐像素相減后的圖像(img0 - img1)
- @file(path): 從路徑path加載圖像,例如 KaTeX parse error: Undefined control sequence: \temp at position 10: @file(“d:\?t?e?m?p?\debug.png”)
- @mem(address, type, channels, width, height, stride): 顯示原始內存數據,輸入的參數依次為:內存地址(UINT64),數據類型,通道數,寬度,高度,步長。例如 @mem(myimg.data, UINT8, 320,640,320)
說明:
- 所有的操作都需要計算圖像。例如@band 操作從圖像中提出去摸個通道圖像。下圖展示了提取綠色通道圖像。
- 操作可以嵌套。下圖展示了對提取綠色通道的圖像二值化
- 如果沒有特定的說明,**默認這些操作都是以 Float32類型數據進行計算并返回Float32 類型的圖像。**這意味著數據類型為INT32,FLOAT64會丟失精度,并被截斷到FLOAT32范圍。
擴展(extensibility)
擴展部分主要講解如何讓image watch支持自定義的圖像類型。這樣在調試程序的過程中就可以像cv::Mat變量一樣,自動顯示到image watch的圖像列表中。
具體操作見官方文檔。
參考資料
官方文檔
歡迎關注個人公眾號
總結
以上是生活随笔為你收集整理的ImageWatch详细教程的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: origintangent插件_orig
- 下一篇: css3动画制作转动相册