在图像中查找特定像素值

2024-09-21 06:48:37 发布

您现在位置: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)

Tags: in图像importimgfornprangered
1条回答
网友
1楼 · 发布于 2024-09-21 06:48:37

您不需要循环来完成这一点。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))

相关问题 更多 >

    热门问题