rem*_*em7 23 python numpy image-processing python-imaging-library
我正在尝试使用NumPy和PIL将两个图像组合在一起.我在MATLAB中这样做的方式如下:
>> M1 = imread('_1.jpg');
>> M2 = imread('_2.jpg');
>> resM = M1 + M2;
>> imwrite(resM, 'res.jpg');
Run Code Online (Sandbox Code Playgroud)
我得到这样的东西:
alt text http://www.deadlink.cc/matlab.jpg
使用合成程序并添加图像,MATLAB结果似乎是正确的.
在Python中我试图做同样的事情:
from PIL import Image
from numpy import *
im1 = Image.open('/Users/rem7/Desktop/_1.jpg')
im2 = Image.open('/Users/rem7/Desktop/_2.jpg')
im1arr = asarray(im1)
im2arr = asarray(im2)
addition = im1arr + im2arr
resultImage = Image.fromarray(addition)
resultImage.save('/Users/rem7/Desktop/a.jpg')
Run Code Online (Sandbox Code Playgroud)
我得到这样的东西:
alt text http://www.deadlink.cc/python.jpg
为什么我会得到所有那些时髦的颜色?我也试过使用ImageMath.eval("a+b", a=im1, b=im2),但是我得到一个关于RGB不支持的错误.
我也看到有一个Image.blend()但需要alpha.
什么是实现我正在寻找的最佳方式?
源图像(图像已被删除):
alt text http://www.deadlink.cc/_1.jpg alt text http://www.deadlink.cc/_2.jpg
嗯,好吧,我使用添加图片图标添加了源图像,当我正在编辑帖子时它们出现,但由于某种原因,图像没有显示在帖子中.
(图片已被删除)2013 05 09
Iva*_*van 32
正如大家所说的那样,你所观察到的怪异颜色是溢出的.正如你在schnaader的回答评论中指出的那样,如果你添加这样的图像,你仍然会溢出:
addition=(im1arr+im2arr)/2
Run Code Online (Sandbox Code Playgroud)
这种溢出的原因是你的NumPy数组(im1arr im2arr)属于uint8类型(即8位).这意味着数组的每个元素只能保存最多255个值,所以当你的总和超过255时,它会回到0:
>>>array([255,10,100],dtype='uint8') + array([1,10,160],dtype='uint8')
array([ 0, 20, 4], dtype=uint8)
Run Code Online (Sandbox Code Playgroud)
为避免溢出,您的数组应该能够包含超过255的值.例如,您需要将它们转换为浮点数,执行混合操作并将结果转换回uint8:
im1arrF = im1arr.astype('float')
im2arrF = im2arr.astype('float')
additionF = (im1arrF+im2arrF)/2
addition = additionF.astype('uint8')
Run Code Online (Sandbox Code Playgroud)
你不应该这样做:
addition = im1arr/2 + im2arr/2
Run Code Online (Sandbox Code Playgroud)
当您丢失信息时,通过在执行混合信息之前压缩图像的动态(有效地使图像为7位).
MATLAB注意:你在MATLAB中没有看到这个问题的原因可能是因为MATLAB在其中一个函数中隐含地处理溢出.
Pau*_*aul 18
使用PIL的blend(),其alpha值为0.5,相当于(im1arr + im2arr)/ 2.Blend不要求图像具有alpha图层.
试试这个:
from PIL import Image
im1 = Image.open('/Users/rem7/Desktop/_1.jpg')
im2 = Image.open('/Users/rem7/Desktop/_2.jpg')
Image.blend(im1,im2,0.5).save('/Users/rem7/Desktop/a.jpg')
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
30245 次 |
| 最近记录: |