python - 遍历所有像素以检查哪些像素是白色的,哪些是黑色的
问题描述
我正在尝试迭代只有黑白像素的图像。对于每个黑色像素,我想降低一个分数,而对于每个白色像素,我想增加一个分数。但是,在测试以下代码时,我收到此错误:
ValueError: The truth value of an array with more than one element is ambiguous.
它与img[i, j]
声明有关。该阵列中怎么会有多个像素?我不是专门通过使用来调用一个像素img[i,j]
吗?有人知道我该如何解决这个问题,或者是否有另一种访问 1 个特定像素的工作方法?
def score(img):
score = 0
height, width, _ = img.shape
for i in range(height):
for j in range(width):
if img[i, j] == [255,255,255]:
score = score + 1
else:
score = score - 1
print(score)
使用 openCV 库读取图像。然后将原始图像过滤为特定颜色,并使用该颜色创建蒙版。如前所述,此蒙版只有黑白像素。
img = cv2.imread("images/test.jpg")
mask = cv2.inRange(img, lower_bound, upper_bound)
解决方案
发生这种情况是因为img[i, j]
给出了一个包含 RGB 值的数组
img[i, j] = [0, 0, 0] # 代表黑色
img[i, j] = [255, 255, 255] # 代表白色
并且这些数组与True
or无关False
。你需要改变你的状况。
>>> img[0,0] == [0,0,0]
array([ True, True, True])
>>> all(img[0,0] == [0,0,0])
True
您的情况需要一个all()
.
推荐阅读
- regex - Data validation in excel for ssn, first name, last name, email address not working
- java - 在 Spring Boot 应用程序中使用 Spring Data JDBC
- vue.js - vue-instagram :图像显示为图标,即使 src/url 是正确的
- css - 尝试在打字稿中为 CSS 赋值不起作用
- java - SpringBoot - 日志环境值无法打开,将被忽略
- twitter-bootstrap - 将输入类型文本从引导导航栏发布到 codeigniter 控制器
- firebase - Cloud Firestore 中的分页
- log4j2 - DefaultRolloverStrategy Log4j2 不工作(以编程方式)
- c - 用静态文件编译 C 程序
- ansible - Ansible 执行剧本 boto 丢失