2014-01-28 71 views
1

通過使用OpenCaV的VideoCapture類,我可以從我的網絡攝像頭錄製8位圖像。 但是,我需要Color的更多值。所以,我可能需要一個16位或24位圖像。 如何在OpenCV中做到這一點?在OpenCV中以更高的深度捕獲圖像

+0

你究竟是什麼意思:「但是,我需要更多顏色值」?你爲什麼需要更多的價值? 「更多」是什麼意思?什麼是可能的用例? – Mailerdaimon

+0

圍繞我的圖像中明亮的光源,所有都有一大塊白色像素。我希望能夠以更精細的方式量化顏色以獲得所有色調的白色 –

+0

@RajathS是否嘗試過直方圖均衡化 – baci

回答

1

如果您的主題是文具,那麼您可以通過平均連續幀生成更清晰的圖像。用更大的位深度存儲結果甚至可能會有一些價值,但不要期待奇蹟--8位相機和8位視頻編解碼器將永遠不會爲您提供適當的16位視頻。

例如,這裏是一個網絡攝像頭在低光照條件下拍攝的幀。這是相當嘈雜:

Webcam image of a boatyard in low light conditions

而這裏的平均一百個連續幀的結果。它更好,但不完美。

Cleaner image obtained by averaging 100 consecutive frames from the same webcam

+0

@squeamih ossifrage你的意思是平均數百個連續幀?它的意思就像是從網絡攝像頭獲取有價值的幀,並取平均100幀,或將平均算法放在圖像上進行增強? – AHF

+1

@Ahmad獲取連續100幀,並將它們平均。使用單個框架,您無法增加像素深度。 –

+0

我嘗試了平均值。在我的圖像周圍的明亮光源中,所有都有一大塊白色像素。我希望能夠以更精細的方式量化顏色以獲得所有色調的白色 –

0

大部分攝像頭的支持每個顏色通道僅8位。確保您的相機支持更高的深度;並且不要使用OpenCV來檢索這種情況下的視頻。 OpenCV將整個數據轉換爲8個通道的3個通道。

使用相機制造商API(或像v4l這樣的第三方庫)來檢索更高深度的數據,並手動將數據推送到IplImage或Mat中。例如:

// allocate Mat data 
Mat frame(640, 480, CV_16UC3);; 
// populate 
loop{ 
frame.at<Vec3b>(i,j) = ImageReturnedByCamera.at(i,j); 
} 
+0

但是,如果我們使用opencv質量好的相機仍然給我們低質量的8位圖像? – AHF

+0

我認爲opencv視頻捕捉類有一個設置編解碼器(用於支持的相機)的屬性,但據我所知應該自己編寫編解碼器,因爲該庫對高質量相機的接口有限。例如:uEye IDS https://code.google.com/p/low-cost-vision/source/browse/trunk/Vision/ueyeOpencv/include/UEyeOpenCV.hpp?r=260。類似問題:http://opencv-users.1802565.n2.nabble.com/Need-to-perform-16-bit-single-channel-video-capture-or-capture-raw-bin-data-td5411180.html ,http://forum.mesa-imaging.ch/viewtopic.php?f=33&t=151 – baci