前提・実現したいこと
グレースケール画像から各画素の輝度値を読み出し、それを基に全画素に対してガンマ補正を行うプログラムです。
このプログラムの詳細は、前回質問させていただいたときにいただいた回答を基に書きました。
(前回の質問内容と回答)
このプログラムが現在処理に平均25秒程度かかっており、これをもっと高速化したいのですが何か良い方法などありませんでしょうか。
ご意見いただければ幸いです。
宜しくお願い致します。
該当のソースコード
python
1%%time 2import cv2 3import matplotlib.pyplot as plt 4import math 5import numpy as np 6%matplotlib inline 7 8 9img = cv2.imread('resize_img09943.jpg',0) 10img_blur = cv2.GaussianBlur(img,(499,499),0) 11 12height = img_blur.shape[0] 13width = img_blur.shape[1] 14 15for x in range(height): 16 for y in range(width): 17 b = img.item(x,y)/255.0 18 g = math.log(0.5)/math.log(b) 19 img_blur[x,y] = 255.0*pow(img_blur[x,y]/255.0,g) 20 21cv2.imwrite('ganma_new-09943.jpg',img_blur)
###追記
ご指摘いただいた通り、imgとimg_blurが逆転していました。修正したところ下記に掲載した画像(大きさが1×4の画像)が出力されてしまいました。
原因が私自身の知識不足もあり、改善方法が分からなかったのでこちらについてもアドバイス等いただけると非常に助かります。
宜しくお願い致します。
また計算式の3行目の250.0*powの中身ですが、img()
とするはずが、img[]
と間違えていました。
修正したところ、処理時間は10秒程度にまで短縮できました。
より早くするために回答でいただいている内容を参考にさせていただきます。
###修正後のコード
python
1%%time 2import cv2 3import matplotlib.pyplot as plt 4import math 5import numpy as np 6%matplotlib inline 7 8 9img = cv2.imread('resize_img09940.jpg',0) 10img_blur = cv2.GaussianBlur(img,(499,499),0) 11 12height = img_blur.shape[0] 13width = img_blur.shape[1] 14 15for x in range(height): 16 for y in range(width): 17 b = img_blur.item(x,y)/255.0 18 g = math.log(0.5)/math.log(b) 19 img_new= 255.0*pow(img.item(x,y)/255.0,g) 20 21cv2.imwrite('ganma_new2-09940.jpg',img_new)

回答2件
あなたの回答
tips
プレビュー