簡體   English   中英

使用 gpu 使用 opencv 測量圖像清晰度

[英]Measure image sharpness with opencv using gpu

我創建了一個小腳本,使用拉普拉斯算子從一組圖像中提取最清晰的圖像,如下所示:

sharpness = cv2.Laplacian(cv2.imread(path), cv2.CV_64F).var()

但是代碼有點慢,而且似乎只使用 CPU,然后我想知道是否有一種方法使用 gpu 來計算該值,但只能找到銳化圖像的示例。

在你知道什么需要時間之前不要優化。

大部分時間都花在加載圖像上。 時間吧,你會看到的。 這涉及訪問大容量存儲和解碼圖像格式。 PNG並不是最復雜的,所以可能會更糟。

拉普拉斯計算使用特定的 kernel 將圖片與任意 3x3 kernel 進行卷積將花費 9 次乘法和 9 次加法。 這個kernel 需要一個班次和五個添加/訂閱。 CPU 的 SIMD 會在早餐時吃這個。

GPU 根本沒有幫助。 將此數據傳輸到 GPU 需要時間。 在 GPU 上開始任何計算還有其他固定成本(延遲、“預熱”)。 CPU 已經完成計算。 如果您有大量圖片,至少可以通過管道傳輸,並且只需上傳一次 kernel 代碼。

在整個操作中,GPU 和 CPU 都可能受內存限制,這意味着計算能力遠未受到挑戰。

如果您真的想要涉及 GPU,最簡單的方法是將 numpy 數組包裝在cv.UMat中,然后將 UMat object 傳入。 然后 OpenCV 將使用 OpenCL。 結果將再次成為 UMat,因此您需要查看OpenCV function 可以為您計算方差。

暫無
暫無

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

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