OpenCV Python 高動態範圍 六十一

2022-06-14 11:03:07 字數 4280 閱讀 8502

作者|opencv-python tutorials

編譯|vincent

**|opencv-python tutorials

在本章中,我們將

高動態範圍成像(hdri或hdr)是一種用於成像和攝影的技術,可以比標準數字成像或攝影技術重現更大的動態亮度範圍。雖然人眼可以適應各種光照條件,但是大多數成像裝置每通道使用8位,因此我們僅限於256級。當我們拍攝現實世界的**時,明亮的區域可能會**過度,而黑暗的區域可能會**不足,因此我們無法一次拍攝所有細節。hdr成像適用於每個通道使用8位以上(通常為32位浮點值)的影象,從而允許更大的動態範圍。

獲取hdr影象的方法有多種,但是最常見的一種方法是使用以不同**值拍攝的場景**。要綜合這些**,了解相機的響應功能以及估算演算法的功能非常有用。合併hdr影象後,必須將其轉換回8位才能在常規顯示器上檢視。此過程稱為音調對映。當場景或攝像機的物件在兩次拍攝之間移動時,還會增加其他複雜性,因為應記錄並調整具有不同**度的影象。

在本教程中,我們展示了兩種演算法(debevec,robertson)來根據**序列生成和顯示hdr影象,並演示了另一種稱為**融合(mertens)的方法,該方法可以生成低動態範圍影象,並且不需要**時間資料。此外,我們估計相機響應函式(crf)對於許多計算機視覺演算法都具有重要價值。hdr流水線的每個步驟都可以使用不同的演算法和引數來實現,因此請檢視參考手冊以了解所有內容。

1. 將**影象載入到列表中

import cv2 as cv

import numpy as np

# 將**影象載入到列表中

2. 將**合成hdr影象在此階段,我們將**序列合併為一張hdr影象,顯示了opencv中的兩種可能性。 第一種方法是debevec,第二種方法是robertson。 請注意,hdr影象的型別為float32,而不是uint8,因為它包含所有**影象的完整動態範圍。

# 將**合成hdr影象

merge_debevec = cv.createmergedebevec()

hdr_debevec = merge_debevec.process(img_list, times=exposure_times.copy())

merge_robertson = cv.createmergerobertson()

hdr_robertson = merge_robertson.process(img_list, times=exposure_times.copy())

3. 色調圖hdr影象我們將32位浮點hdr資料對映到[0..1]範圍內。實際上,在某些情況下,該值可以大於1或小於0,因此請注意,我們稍後將必須裁剪資料以避免溢位。

# 色調圖hdr影象

tonemap1 = cv.createtonemap(gamma=2.2)

res_debevec = tonemap1.process(hdr_debevec.copy())

4. 使用mertens融合**在這裡,我們展示了一種替代演算法,用於合併**影象,而我們不需要**時間。我們也不需要使用任何色調對映演算法,因為mertens演算法已經為我們提供了[0..1]範圍內的結果。

# 使用mertens融合**

merge_mertens = cv.createmergemertens()

res_mertens = merge_mertens.process(img_list)

5. 轉為8-bit並儲存為了儲存或顯示結果,我們需要將資料轉換為[0..255]範圍內的8位整數。

# 轉化資料型別為8-bit並儲存

你可以看到不同的結果,但是請考慮到每種演算法都有其他額外的引數,你應該將它們附加以達到期望的結果。 最佳實踐是嘗試不同的方法,然後看看哪種方法最適合你的場景。

mertenes融合

攝像機響應功能(crf)使我們可以將場景輻射度與測量強度值聯絡起來。crf在某些計算機視覺演算法(包括hdr演算法)中非常重要。在這裡,我們估計逆相機響應函式並將其用於hdr合併。

# 估計相機響應函式(crf)

cal_debevec = cv.createcalibratedebevec()

crf_debevec = cal_debevec.process(img_list, times=exposure_times)

hdr_debevec = merge_debevec.process(img_list, times=exposure_times.copy(), response=crf_debevec.copy())

cal_robertson = cv.createcalibraterobertson()

crf_robertson = cal_robertson.process(img_list, times=exposure_times)

hdr_robertson = merge_robertson.process(img_list, times=exposure_times.copy(), response=crf_robertson.copy())

相機響應功能由每個顏色通道的256長度向量表示。 對於此序列,我們得到以下估計:

嘗試所有色調圖演算法:cv::tonemapdrago,cv::tonemapmantiuk和cv::tonemapreinhard

嘗試更改hdr校準和色調圖方法中的引數。

動態計算UITableviewcell高度

自 在ios開發中,我們少不了和uitableview打交道,因為uitableview也是uikit中最複雜的乙個控制項了。在使用uitableview的過程中,uitableviewcell也是必不可少的,頁面列表形式的展示可謂是各種各樣,相信不少童鞋們也曾為複雜的頁面布局困惑過,其中比較難的也...

OpenCV Python模糊處理

import cv2 as cv import numpy as np 均值模糊 defblur demo img dst cv.blur img,5 5 cv.imshow blur image dst import cv2 as cv import numpy as np 中值模糊 defmed...

OpenCV Python 人臉檢測

分享一下我老師大神的人工智慧教程!零基礎,通俗易懂!例項總結 下午的時候,配好了opencv的python環境,opencv的python環境搭建。於是迫不及待的想體驗一下opencv的人臉識別,如下文。haar like百科釋義。通俗的來講,就是作為人臉特徵即可。haar特徵值反映了影象的灰度變化...