<p>对于RGB图像如何?在</p>
<pre><code>img[img[:, :, 0] < 255, 0] = 255
</code></pre>
<p>使用这个方法,我们从图像的红色通道创建一个布尔掩码,并检查其值是否小于255。如果是,那么我们将这些值设置为255。在</p>
<p>OpenCV将图像读取为<code>BGR</code>,因此:</p>
^{pr2}$
<p>是合适的。在</p>
<p>或者,您也可以:</p>
<pre><code>mask_R = img < 255)[:, :, 2]
img[mask_R, 2] = 255
</code></pre>
<hr/>
<p>示例:</p>
<pre><code>In [24]: a
Out[24]:
array([[[168],
[170],
[175]],
[[169],
[170],
[172]],
[[165],
[170],
[174]]])
In [25]: a > 170
Out[25]:
array([[[False],
[False],
[ True]],
[[False],
[False],
[ True]],
[[False],
[False],
[ True]]], dtype=bool)
</code></pre>
<p>使用上述条件(<code>a > 170</code>),我们生成一个布尔掩码。现在,假设你取任何一个通道,把它放在这个布尔掩码的上面。当我们分配新值时,无论掩码有<code>true</code>值,图像数组中的相应元素都将用新值重置。在</p>
<pre><code># we just filter out the values in array which match our condition
In [36]: a[a > 170]
Out[36]: array([175, 172, 174])
# assign new values. Let's say 180
In [37]: a[a > 170] = 180
In [38]: a
Out[38]:
array([[[168],
[170],
[180]], # <== new value
[[169],
[170],
[180]], # <== new value
[[165],
[170],
[180]]]) # <== new value
</code></pre>