pythonで階調を細分化したい
0 likes
画素値がmin_value
からmax_value
までの値であれば256階調にできる物を作ってみました.
import numpy as np
min_value = 10
max_value = 100
def gradation(x, x_min, x_max, level = 256):
ret = np.clip(x, x_min, x_max)
ret = (ret - x_min) / (x_max - x_min)
return np.ceil(ret * (level - 1))
x = [10, 15, 20, 30, 55, 100]
print(gradation(x, min_value, max_value))
[ 0. 15. 29. 57. 128. 255.]
扱うデータx
がこの画素値の範囲を超えないのであれば最初のnp.clip()
の手続きは不要です.念のために入れたまでですが参考になれば幸いです.
ちなみにmatplotlib
などの画像表示をしてくれるライブラリではこのような書き方をしなくても画像表示の際にデータを自動で諧調処理してくれたのちに表示してくれます.
@j0083
Questioner
グレースケールにしたり、ということでしょうか。
以下でどうでしょう?
@j0083
Questioner
グレイスケール処理をした画像を256階調の範囲で2値化処理したいのでしょうか?
cv2.threshold(gray,0,255, cv2.THRESH_BINARY | cv2.THRESH_OTSU)
の第3引数を変えると処理ができます。
import cv2
def main():
image=cv2.imread("xxxx.png")
#gray=cv2.cvtColor(image,cv2.COLOR_RGB2GRAY)
ret,thresh = cv2.threshold(image,0,255, cv2.THRESH_BINARY | cv2.THRESH_OTSU)
cv2.imshow("gray1",thresh)
cv2.waitKey()
cv2.destroyAllWindows()
if __name__=="__main__":
main()