2

これを行うためのよりきれいな方法はありますか?具体的には、numpy API を通じてこれらの最大値を利用できますか? API でそれらを見つけることができませんでしたが、こちらのドキュメントで簡単に見つけることができます。

MAX_VALUES = {np.uint8: 255, np.uint16: 65535, np.uint32: 4294967295, \
              np.uint64: 18446744073709551615}

try:
    image = MAX_VALUES[image.dtype] - image
except KeyError:
    raise ValueError, "Image must be array of unsigned integers."

PIL や cv2 などのパッケージは、画像を反転するための便利なツールを提供しますが、コードのこの時点では、numpy 配列があり (より高度な分析が続きます)、numpy に固執したいと思います。

4

2 に答える 2

4

やってみる

image ^= MAX_VALUES[image.dtype]
于 2013-06-26T21:21:42.500 に答える
1

ちなみに、MAX_VALUES自分自身を定義する必要はありません。NumPyにはそれらが組み込まれています:

import numpy as np
h, w = 100, 100
image = np.arange(h*w).reshape((h,w)).astype(np.uint8)
max_val = np.iinfo(image.dtype).max
print(max_val)
# 255
image ^= max_val

print(image)
# [[255 254 253 ..., 158 157 156]
#  [155 154 153 ...,  58  57  56]
#  [ 55  54  53 ..., 214 213 212]
#  ..., 
#  [ 27  26  25 ..., 186 185 184]
#  [183 182 181 ...,  86  85  84]
#  [ 83  82  81 ..., 242 241 240]]
于 2013-06-26T21:39:06.203 に答える