我有一個應用程序,它接收來自包裝有ctypes的相機API的JPEG數據指針,將其轉換爲wx.Image,並將圖像顯示爲電影。Python中的圖像位操作
其中一個需要的功能是設置一個像素的兩個分量等於第三個。例如,RGB格式的像素是(100,200,255),我想將R和B值設置爲等於G或(200,200,200)。我需要爲圖像中的每個像素做他 ,同時保持一個體面的幀率。
我可以通過調用Image.GetData來訪問我的wx.Image中的RGB值,它將以下列格式返回一個包含像素值的字符串:RGBRGBRGB ...我通過遍歷該RGBRGBRGB串。
然而,這種幼稚的做法實在太慢,實現體面的FPS,因爲(我認爲):
一)我通過圖像中的每個像素迭代。
b)我正在做太多的數據複製。
我已經考慮將RGB數據轉換爲numpy,執行操作(我假設numpy會有更快的方式做這種事情),然後轉換回wx.Image。不幸的是,我不能直接從原始數據轉換爲numpy,因爲數據以JPEG形式出現,而不是以RGB位圖形式出現。所以我需要從data-> wx.Image-> numpy array-> wx.Image。
我還考慮實現我自己的python緩衝區,它將在讀取時返回例如G像素值而不是R和B值。我認爲這將是理想的解決方案,因爲它不需要數據複製或迭代過多,但我不知道如何去做這件事。我需要用C寫這個緩衝區嗎?是否有可能在純Python中實現緩衝區並仍然處理原始內存?
所以,你認爲我應該改善我的表現嗎?我應該嘗試numpy還是緩衝解決方案,還是有更簡單的解決方案,我錯過了?
我主要尋找創意/鏈接到相關的文檔或實例,但是,如果某人想要寫一些代碼,然後這很好:)
感謝