擅长:python、mysql、java
<p>正如大家已经建议的那样,你观察到的奇怪的颜色已经泛滥了。正如您在<a href="https://stackoverflow.com/questions/524930/numpy-pil-adding-an-image/524943#524943">comment of schnaader's answer</a>中指出的,如果您像这样添加图像,则仍会出现溢出:</p>
<pre><code>addition=(im1arr+im2arr)/2
</code></pre>
<p>溢出的原因是NumPy数组(<em>im1arr</em><em>im2arr</em>)属于<strong>uint8</strong>类型(即8位)。这意味着数组中的每个元素最多只能保存255个值,因此当总和超过255时,它将在0周围循环:</p>
<pre><code>>>>array([255,10,100],dtype='uint8') + array([1,10,160],dtype='uint8')
array([ 0, 20, 4], dtype=uint8)
</code></pre>
<p>为了避免溢出,数组应该能够包含255以上的值。您需要将它们转换为浮点值,例如,执行混合操作并将结果转换回uint8:</p>
<pre><code>im1arrF = im1arr.astype('float')
im2arrF = im2arr.astype('float')
additionF = (im1arrF+im2arrF)/2
addition = additionF.astype('uint8')
</code></pre>
<p>您不应该这样做:</p>
<pre><code>addition = im1arr/2 + im2arr/2
</code></pre>
<p>当您丢失信息时,在执行混合信息之前,通过挤压图像的动态(有效地使图像变成7位)。</p>
<p><strong>MATLAB注意</strong>:您在MATLAB中没有看到这个问题的原因,可能是因为MATLAB隐式地处理了它的一个函数中的溢出。</p>