Man*_*eli 50 python arrays opencv numpy image-processing
我想加载彩色图像,将其转换为灰度,然后反转文件中的数据.
我需要的是:在OpenCV中迭代数组并使用此公式更改每个值(这可能是错误的但对我来说似乎是合理的):
img[x,y] = abs(img[x,y] - 255)
Run Code Online (Sandbox Code Playgroud)
但我不明白为什么它不起作用:
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")
Run Code Online (Sandbox Code Playgroud)
我不想做一个明确的循环(我试图更加pythonic).我可以看到,在一张白色背景的图像中,它变成了黑色,但只有这一点看起来不像其他颜色有很多(如果有的话)变化.
Sau*_*tro 105
你几乎做到了.abs(imagem-255)由于你dtype是一个无符号整数,你会被错误的结果所欺骗.你必须做(255-imagem)的是保持整数无符号:
def inverte(imagem, name):
imagem = (255-imagem)
cv2.imwrite(name, imagem)
Run Code Online (Sandbox Code Playgroud)
您还可以使用bitwise_notOpenCV 的功能反转图像:
imagem = cv2.bitwise_not(imagem)
Run Code Online (Sandbox Code Playgroud)
小智 41
或者,您可以使用bitwise_notOpenCV 的功能反转图像:
imagem = cv2.bitwise_not(imagem)
Run Code Online (Sandbox Code Playgroud)
我喜欢这个例子:https: //www.learnopencv.com/filling-holes-in-an-image-using-opencv-python-c/
Dir*_*llu 15
您可以使用“波浪号”运算符来执行此操作:
import cv2
image = cv2.imread("img.png")
image = ~image
cv2.imwrite("img_inv.png",image)
Run Code Online (Sandbox Code Playgroud)
这是因为“波浪号”运算符(也称为一元运算符)根据对象类型进行补码工作
例如整数,其公式为:
x +(〜x)= -1
但是在这种情况下,opencv使用“ uint8 numpy数组对象”作为其图像,因此其范围是从0到255
因此,如果我们将此运算符应用于“ uint8 numpy数组对象”,如下所示:
import numpy as np
x1 = np.array([25,255,10], np.uint8) #for example
x2 = ~x1
print (x2)
Run Code Online (Sandbox Code Playgroud)
结果是:
[230 0 245]
Run Code Online (Sandbox Code Playgroud)
因为它的公式是:
x2 = 255-x1
而这正是我们要解决的问题。
| 归档时间: |
|
| 查看次数: |
111753 次 |
| 最近记录: |