2013-06-26 72 views
1

有沒有更漂亮的方法來做到這一點?具體來說,是否可以通過numpy API獲得這些最大值?我一直無法在API中找到它們,儘管它們很容易找到here in the docs顛倒numpy陣列圖像可能是uint8,uint16,

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的。

回答

1

順便說一句,你不需要定義MAX_VALUES自己。 NumPy has them built-in

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]] 
+0

啊,''iinfo''就是我要找的東西。謝謝。 –

3

嘗試做

image ^= MAX_VALUES[image.dtype] 
+0

''^ =''對我來說是新的,對Google來說很難。運營商稱爲什麼? –

+0

我相信這是'xor'運算符。 – wflynny

+0

http://docs.python.org/2/reference/datamodel.html?highlight=xor#object.__ixor__ – unutbu