Python - 使用中间值将二进制转换为彩色图像

时间:2016-03-06 22:56:02

标签: python image colors binary boolean

我想拍摄彩色图像并将其转换为二进制图像,其中接近黑色或白色的图像返回False,并且所有中间值都返回True。

同时强制执行以下两个条件的正确语法是什么?

binary = color.rgb2gray(img) > 0.05 
binary = color.rgb2gray(img) < 0.95

如果我用过这个:

%matplotlib inline
import numpy as np
import matplotlib.pyplot as plt
from skimage import color
import requests
from PIL import Image
from StringIO import StringIO

url = 'https://mycarta.files.wordpress.com/2014/03/spectrogram_jet.png'
r = requests.get(url)
img = np.asarray(Image.open(StringIO(r.content)).convert('RGB'))

然后:

binary = color.rgb2gray(img)  < 0.95

我会得到一个合适的二进制图像,我可以用它绘图:

fig = plt.figure(figsize=(10,10))
ax = fig.add_subplot(111)
plt.imshow(binary, cmap='gray')
ax.xaxis.set_ticks([])
ax.yaxis.set_ticks([])
plt.show()

与此类似:

color.rgb2gray(img) < 0.95

但如果我像这样一起尝试它们:

binary = color.rgb2gray(img) > 0.05 and color.rgb2gray(img) < 0.95

我收到了这条消息:

  

ValueError:具有多个元素的数组的真值   暧昧。使用a.any()或a.all()

2 个答案:

答案 0 :(得分:2)

您的代码无法运行,因为rgb2gray skimage.color方法会返回一个数组。 skimage模块使用numpy模块,该模块拒绝对数组执行布尔比较。这是ValueError来自的地方。

在阵列上使用and之类的比较运算符时,numpy将不符合。相反,您应该使用np.logical_and或二元运算符&

答案 1 :(得分:-1)

你可以使用&#39;和&#39;结合这两个条件

binary = color.rgb2gray(img) > 0.05 and color.rgb2gray(img) < 0.95

或者你可以把它们写成一个条件

binary = 0.05 < color.rgb2gray(img) < 0.95