我想加载彩色图像,将其转换为灰度,然后反转文件中的数据。
我需要的是:迭代 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")
我不想做一个显式循环(我想更 Pythonic)。我可以看到,在一张白色背景的图像中,它变成了黑色,但仅此而已,其他颜色看起来并没有太大(如果有的话)变化。
最佳答案
你几乎做到了。您被 abs(imagem-255)
会给出错误结果的事实所欺骗,因为您的 dtype
是一个无符号整数。您必须执行 (255-imagem)
以保持整数无符号:
def inverte(imagem, name):
imagem = (255-imagem)
cv2.imwrite(name, imagem)
您也可以使用 OpenCV 的 bitwise_not
函数反转图像:
imagem = cv2.bitwise_not(imagem)
关于python - 使用 OpenCV 在 Python 中反转图像,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19580102/