我想拍摄彩色图像并将其转换为二进制图像,其中接近黑色或白色的图像返回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()
答案 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