python - 尝试仅显示捕获的图像的某些颜色像素时出错
问题描述
我正在尝试将捕获图像的所有像素(不是黄色)转换为白色。
我收到的错误消息是:
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()
解决方案
jmg
是一个包含三个值的 numpy 数组。当您将 numpy 数组与另一个数组(或列表,在您的情况下)进行比较时,它将比较它们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
if (jmg[i,j]!=[255,255,0]).any():
jmg[i,j]=[255,255,255]
推荐阅读
- ios - 在范围内找不到类型“GADInterstitial”?
- mysql - 如何创建仅在其中一行包含所需值时才返回结果的 SQL 语句?
- c# - 将字符串转换为 int,然后再转换回字符串
- python - 如何动态替换 pandas.Series 中的值?
- javascript - 如何以角度访问 HTTP 错误响应正文
- c - 索引“unsigned long”变量并打印结果
- java - 为什么每个栈帧都有自己的操作数栈?
- azure - 新创建的 azure 广告组在 azure devops(rest api)中不可用
- html - 在 Rails 视图中,如何在 HTML 代码片段中显示动态代码?
- r - 在 R 中识别和删除反向交易