python - 在图像中查找某个像素值
问题描述
我想检查每个像素是否为红色。因此,我准备了一张白色图像,在其中打印了一些红线。红线正是这种颜色:(0, 0, 255)
。
使用以下代码,在图像中未检测到红色。怎么了?
import cv2
import numpy as np
img = cv2.imread(r"....\red.png")
x,y,z = img.shape
print(x,y,z)
for i in range(x):
for j in range(y):
r = np.where((img[i,j,0]==0 & img[i,j,1]==0 & img[i,j,2]==255))
redarray = np.array(r)
red = np.size(redarray)
print("r: ", r)
print("redarray: ", redarray)
print("red: ", red)
解决方案
您不需要 for 循环来完成此操作。numpy 的优点之一!
np.where
将通过一些工作来做到这一点:
np.where((img == (0, 0, 255)).all(axis=2))
按照您的示例,您将需要创建一个 if 语句,如果像素为红色,则该语句将构建一个像素列表。redarray
在您的帖子中将仅反映每个 for 循环迭代的当前像素。你不是在那里建立一个列表。所以这样的事情应该有效:
red_pixels = []
for i in range(x):
for j in range(y):
if np.array_equal(img[i, j], [0, 0, 255]):
red_pixels.append((i, j))
推荐阅读
- xamarin.forms - 在 Xamarin 表单中,将文本放在在 android 中工作但不能按预期工作 ios 的视图中
- javascript - 选择日期选择器的年份
- uikit - UIImagePickerViewController 编辑问题
- javascript - 如何通过单击 puppeteer 打开和控制新选项卡 TARGET _BLANK
- reactjs - 在使用惯性.js 和代码拆分时访问上下文 API
- php - 无法从 gmail 发送电子邮件到办公室电子邮件地址(PHP)
- python - TypeError:reduce_sum() 得到了一个意外的关键字参数“reduction_indices”?
- dns - 我可以在 2 个不同的托管服务中托管我的主域和它的子域吗
- java - 如何在java中导入在运行时生成的类
- gitlab - gitlab 作业失败 - 图像提取失败