Я хочу загрузить цветное изображение, преобразовать его в оттенки серого, а затем инвертировать данные в файле.инвертирование изображения в Python с OpenCV
Что мне нужно: перебрать массив в OpenCV и изменить каждое значение с этой формулой (это может быть неправильным, но это кажется разумным для меня):
img[x,y] = abs(img[x,y] - 255)
, но я не понимаю, почему не работает:
def inverte(imagem, name):
imagem = abs(imagem - 255)
cv2.imwrite(name, imagem)
def inverte2(imagem, name):
for x in np.nditer(imagem, op_flags=['readwrite']):
x = abs(x - 255)
cv2.imwrite(name, imagem)
if __name__ == '__main__':
nome = str(sys.argv[1])
image = cv2.imread(nome)
gs_imagem = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)
inverte(gs_imagem, "invertida.png")
inverte2(gs_imagem, "invertida2.png")
Я не хочу делать явный цикл (я пытаюсь быть более питоническим). Я вижу, что на одном изображении, получившем белый фон, он стал черным, но только это не похоже на то, что другие цвета имеют много (если они есть) изменения.
Спасибо! Я не знал, что в python стандартное значение будет беззнаковым int ... – Mansueli
Неплохо, не думал, что все будет так просто, спасибо. – Nit
Не изобретайте велосипед, если вам это не нужно; для инвертирования данных используйте [Не] (http://docs.opencv.org/2.4/modules/core/doc/operations_on_arrays.html#bitwise-not) (ака 'bitwise_not'). – vaxquis