在图像中查找特定的像素值



我想检查每个像素是否为红色。因此,我准备了一张白色图像,在其中打印了一些红线。红线正是这种颜色:(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)

您不需要循环来实现这一点。numpy的优点之一!

np.where将通过一点工作做到这一点:

np.where((img == (0, 0, 255)).all(axis=2))

根据您的示例,如果像素是红色的,您需要创建一个if语句,该语句将构建一个像素列表。您文章中的redarray将只反映循环迭代的当前像素。你没有在那里建立一个列表。所以像这样的东西应该起作用:

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))

最新更新