与两个图像开始im1
,并im2
与PIL模块创建,我们有相应的黑白图像,
bw_im1 = im1.convert('1')
Run Code Online (Sandbox Code Playgroud)
和
bw_im2 = im2.convert('1')
Run Code Online (Sandbox Code Playgroud)
的每个像素bw_im2
和bw_im2
为0或256。
假设双方bw_im2
并bw_im2
具有相同的尺寸。
你如何异或所有相应的条目然后总结它们?
我的工作
我编写了以下存根/概念验证Python 程序,但担心使用代码(解包/翻译)会很复杂。可能有一种更直接、更有效的方法来处理两个图像中的像素。
import numpy as np
M = np.zeros((2, 3))
M[0,2] = 255
M[1,0] = 255
M[1,1] = 255
print(M)
N = np.zeros((2, 3))
N = np.zeros((2, 3))
N[0,2] = 255
N[1,1] = 255
N[1,2] = 255
print(N)
list_M = list(M)
list_N = list(N)
xor_signal = 0
for row in range(0, len(list_M)):
for col in range(0,len(list_M[row])):
xor_signal = xor_signal + int(bool(list_M[row][col]) != bool(list_N[row][col]))
print(xor_signal)
Run Code Online (Sandbox Code Playgroud)
输出
[[ 0. 0. 255.]
[255. 255. 0.]]
[[ 0. 0. 255.]
[ 0. 255. 255.]]
2
Run Code Online (Sandbox Code Playgroud)
Mar*_*ell 10
您可以像这样使用 PIL 的ImageChops:
#!/usr/local/bin/python3
import numpy as np
from PIL import Image, ImageChops
# Open images
im1 = Image.open("im1.png")
im2 = Image.open("im2.png")
result = ImageChops.logical_xor(im1,im2)
result.save('result.png')
Run Code Online (Sandbox Code Playgroud)
所以,如果你从这两个开始:
结果将是:
当然,如果你是物理学家,你可以这样写 ;-)
#!/usr/local/bin/python3
from PIL import Image, ImageChops
ImageChops.logical_xor(Image.open("im1.png"), Image.open("im2.png")).save('result.png')
Run Code Online (Sandbox Code Playgroud)
或者你可以像这样使用 Numpy 的 XOR:
#!/usr/local/bin/python3
import numpy as np
from PIL import Image
# Open images
im1 = Image.open("im1.png")
im2 = Image.open("im2.png")
# Make into Numpy arrays
im1np = np.array(im1)*255
im2np = np.array(im2)*255
# XOR with Numpy
result = np.bitwise_xor(im1np, im2np).astype(np.uint8)
# Convert back to PIL image and save
Image.fromarray(result).save('result.png')
Run Code Online (Sandbox Code Playgroud)
您可以通过在最后添加以下内容来对像素求和:
print('Sum: {}'.format(np.sum(result)))
Run Code Online (Sandbox Code Playgroud)
或者,您无需编写任何 Python,只需在终端中键入以下ImageMagick命令:
magick im1.png im2.png -evaluate-sequence xor result.png
Run Code Online (Sandbox Code Playgroud)
如果您使用的是 v6 或更早版本,请改用以下内容:
convert im1.png im2.png -evaluate-sequence xor result.png
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
3788 次 |
最近记录: |