日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

ImageWatch详细教程

發布時間:2023/12/20 编程问答 32 豆豆
生活随笔 收集整理的這篇文章主要介紹了 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 會自動消失,下次調試過程中會自動出現。
    其實還是更簡單的方法:將鼠標停靠在cv::Mat變量上,單擊放大鏡即可,具體見后文。

在 image watch窗口的左上角,有 Locals和 Watch 兩個單選按鈕。

  • 如果在 Locals 模式,下面的圖像列表(B區域)就會自動顯示當前棧中圖像變量(image watch 可以識別的類型,例如cv::Mat)。
  • 如果在 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 的通用性豈不是大打折扣。答案是否定的,可以說基本都可以顯示,有兩種方式:
  • 使用@mem 操作,具體見Image Operators
  • 對于用戶自定義的數據類型,可以使用擴展接口添加到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 使用一下兩個規則把像素值映射到顯示的顏色。

  • 決定顏色空間。如果沒有設置像素格式就使用默認顏色空間(根據通道數)
    • 單通道圖:灰度圖(默認)或偽彩色(可以在視圖器中設置了)
    • 雙通道圖:紅/綠
    • 三通道圖:藍、綠、紅
    • 四通道圖:藍、綠、紅、透明通道(默認),或者忽略透明通道(可以在視圖器中設置了)
    • 大于四個通道的圖:取前三個通道為藍、綠、紅,忽略剩余通道。
  • 根據通道類型,映射通道值到顏色強度(0% ··· 100%)
    • 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详细教程的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。