嘗試在 dash 應用程式中對影像執行伽馬校正。但是經過我的函式后,原來的彩色影像變成了灰度。我使用 PillowImage.new("P", ...)表示顏色而不是“L”,后者表示灰度。如果我使用Image.new("RGB",...)回傳的影像是紅色的。請幫忙。
def gamma_correct(gamma, url):
im = Image.open(requests.get(url, stream=True).raw)
gamma1 = gamma
row = im.size[0]
col = im.size[1]
result_img1 = Image.new("RGB", (row, col))
for x in range(1 , row):
for y in range(1, col):
r = pow(im.getpixel((x,y))[0]/255, (1/gamma1))*255
g = pow(im.getpixel((x,y))[1]/255, (1/gamma1))*255
b = pow(im.getpixel((x,y))[2]/255, (1/gamma1))*255
result_img1.putpixel((x,y)[0], int(r))
result_img1.putpixel((x,y)[1], int(g))
result_img1.putpixel((x,y)[2], int(b))
uj5u.com熱心網友回復:
請記住“P”和“RGB”是不一樣的。P 是調色板模式,限制為 256 色。
彩色影像具有以下尺寸:(寬度、高度、通道),通道通常為 = 3。
看起來您正在保存影像,所有顏色值都在一個通道中,這意味著您最終會得到一個影像(寬度,高,通道),通道 = 1。這也是為什么當您獲得紅色影像時您使用 Image.new("RGB",...),因為您的影像僅在第一個通道 (R) 中有資料
@ChristophRackwitz 在他的評論中都是正確的。大多數情況下,處理影像的庫實際上處理尺寸(高度、寬度、通道),因此如果您從磁盤加載影像,即 (1920,1080,3),記憶體中的物件實際上具有尺寸 (1080,1920 ,3)。此外,某些軟體(如 opencv)甚至默認將通道視為 BGR 而不是 RGB
RGB 影像有 3 個通道,分別是每種顏色的值。這意味著對于影像中的每個像素,有3 個顏色值,一個用于紅色通道 (R),一個用于綠色 (G),一個用于藍色 (B)
嘗試除錯影像修改程序,即:
for x in range(1 , row):
for y in range(1, col):
print(im.getpixel(x,y))
r = pow(im.getpixel((x,y))[0]/255, (1/gamma1))*255
g = pow(im.getpixel((x,y))[1]/255, (1/gamma1))*255
b = pow(im.getpixel((x,y))[2]/255, (1/gamma1))*255
print(im.getpixel(x,y))
這兩個列印陳述句將列印一個 3 維陣列。檢查每個通道的值是否符合預期,之前和之后
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/386695.html
