我正在尝试将捕获图像的所有像素(不是黄色)转换为白色。
我收到的错误消息是:
if jmg[i,j]!=[255,255,0]:
valueError: the truth value of an array with more than one element is ambiguous. use a.any() or a.all()
下面是我的代码:
import cv2
import picamera
import numpy
import time
from matplotlib import pyplot as plt
print("ready")
with picamera.PiCamera() as camera:
camera.resolution=(400,400)
time.sleep(1)
camera.capture("/home/pi/rowdy.jpg")
print("Done")
yellow=[255,255,0]
img=cv2.imread("/home/pi/rowdy.jpg",1)
jmg=cv2.cvtColor(img,cv2.COLOR_BGR2RGB)
for i in numpy.arange(399):
for j in numpy.arange(399):
if jmg[i,j]!=[255,255,0]:
jmg[i,j]=[255,255,255]
plt.imshow(jmg)
plt.xticks([]),plt.yticks([])
plt.show()
答案 0 :(得分:1)
{
"folders": [
{
"path": "./editor"
},
{
"path": "./viewer"
}
]
}
是一个由三个值组成的numpy数组。当您将numpy数组与另一个数组(或列表)进行比较时,它将比较它们jmg
。
element-wise
这意味着您需要执行错误消息中所说的操作,并使用if jmg[i,j]!=[255,255,0]: #np.array(255, 0, 0) != [255,255,0]
# -> np.array(False, True, False)
或any()
来确定所需的值。在您的情况下,您要检查其中的all()
个值是否不匹配,这意味着您的元素逻辑将使这三个值之一any
True
答案 1 :(得分:1)
一种更快的方法是使用numpy
库。首先创建一个法师副本,然后使用numpy.argwhere
替换所需位置的像素值:
image1 = image.copy()
image1[np.argwhere(image != [255,255,0])] = [255,255,255]