簡體   English   中英

OpenCV convertTo()

[英]OpenCV convertTo()

我遇到了這個代碼:

image.convertTo(temp_image,CV_16SC3);

我從這里看到了 convertTo() 函數的描述,但讓我感到困惑的是image 我們如何閱讀上面的代碼? imagetemp_image之間的關系是什么?

謝謝。

這里的其他答案是正確的,但缺少一些細節。 讓我試試。

image.convertTo(temp_image,CV_16SC3);

您有一個圖像image和一個目標圖像temp_image 您沒有指定image的類型,但可能是CV_8UC3CV_32FC3 ,即 3 通道圖像(因為convertTo不會改變通道數),其中每個通道的深度為 8 位( unsigned char ,CV_ 8U C3)或 32 位( float , CV_ 32F C3 )。

這行代碼會改變每個通道的深度,這樣temp_image每個通道的深度都是 16 位( short )。 具體來說,它是一個有signed short ,因為類型說明符有S : CV_16 S C3。

請注意,如果您正在縮小深度,如從floatsigned short ,則saturate_cast將確保temp_image中的所有值都在正確的范圍內,即在 [–32768, 32767] 中表示有signed short

為什么需要改變圖像的深度?

  1. 某些 OpenCV 函數需要具有特定深度的輸入圖像。
  2. 您需要一個矩陣來包含不同范圍的值。 例如,如果您需要對某些圖像 CV_8UC3(通常為 BGR 圖像)求和(或減去),則最好將結果存儲在 CV_16SC3 中,否則您可能會因飽和而得到錯誤的結果,因為 CV_8U 圖像的范圍在 [ 0,255]
  3. 您使用imread閱讀,或者想要使用 16 位深度的imwrite圖像存儲。 這通常用於 (AFAIK) 醫學或圖形應用程序以允許更廣泛的顏色。 但是,大多數顯示器不支持 16 位圖像可視化。
  4. 可能還有其他情況,如果我錯過了對您來說很重要的一個,請告訴我。

圖像是像素信息矩陣(即1080p圖像將是1,920 × 1,080矩陣,其中每個條目包含該像素的rbg值)。 您所做的就是將該矩陣(每個像素條目,迭代地)重新格式化為新類型( CV_16SC3 ),以便不同的程序可以讀取它。

temp_image是一個新的像素信息矩陣,基於格式化為CV_16SC3image

第一個是,第二個是目的地 因此,它獲取圖像,將其轉換為 CV_16SC3 類型並存儲在 temp_image 中。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM