簡體   English   中英

將圖像中的每個像素乘以一個因子

[英]Multiply each pixel in an image by a factor

我有一個使用拜耳過濾器創建的圖像,顏色略有偏差。 我需要將每個像素的 RG 和 B 乘以某個因子(R、G 和 B 的每個因子不同)以獲得正確的顏色。 我正在使用 python 成像庫,當然也用 python 編寫。 有沒有辦法有效地做到這一點?

謝謝!

這是如何做到的:

  1. 首先將您的圖像拆分為 RGB 通道。
  2. 使用point將通道乘以因子(示例中為1.5 ,在 r 通道上)。
  3. 將頻道合並回來。

代碼如下:

import Image
im = Image.open('1_tree.jpg')
im = im.convert('RGB')
r, g, b = im.split()
r = r.point(lambda i: i * 1.5)
out = Image.merge('RGB', (r, g, b))
out.show()

原來的:

在此處輸入圖片說明

紅色通道乘以1.5 (它有點紅..):

在此處輸入圖片說明

您可以非常有效地完成此操作,並且只需使用帶有convert()函數的簡單變換矩陣:

#!/usr/bin/env python3 

from PIL import Image 

# Open image 
im = Image.open('tree.jpg') 

# Make transform matrix, to multiply R by 1.5, leaving G and B unchanged
Matrix = ( 1.5, 0,  0, 0, 
           0,   1,  0, 0, 
           0,   0,  1, 0) 

# Apply transform and save 
im = im.convert("RGB", Matrix) 
im.save('result.png') 

輸入圖像:

在此處輸入圖片說明

結果圖像:

在此處輸入圖片說明

關鍵詞:Python、PIL、枕頭、顏色矩陣、顏色矩陣、變換、乘法通道、縮放通道、分離、單獨、單獨通道、帶、組件、單獨、分割通道、合並通道、圖像、圖像處理。

作為基本優化,如果您創建 3 個查找表,每個查找表用於 R、G 和 B,將輸入值 (0-255) 映射到輸出值 (0-255),可能會節省一點時間。 查找數組條目可能比乘以十進制值並將結果四舍五入為整數更快。 不知道快了多少。

當然,這假設值應該始終映射相同。

從文檔:

from PIL import Image
Image.eval(image, function) => image

將函數(應采用一個參數)應用於給定圖像中的每個像素。 如果圖像有多個波段,則對每個波段應用相同的功能。 請注意,該函數為每個可能的像素值計算一次,因此您不能使用隨機組件或其他生成器。

您可以使用.split將圖像拆分為三個通道中的每一個的單獨圖像, .eval按照.eval建議使用,並使用Image.merge將它們重新組合在一起。

如果您的任何乘法因子大於 1,請務必將輸出鉗位到 255。

如果類型是 numpy.ndarray 只是 img = np.uint8(img*factor)

暫無
暫無

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

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