Python 在图像中查找特定像素值
我想检查每个像素是否为红色。因此,我准备了一个白色图像,在那里我打印了一些红线。红线正是这种颜色:Python 在图像中查找特定像素值,python,image,numpy,opencv,for-loop,Python,Image,Numpy,Opencv,For Loop,我想检查每个像素是否为红色。因此,我准备了一个白色图像,在那里我打印了一些红线。红线正是这种颜色:(0,0255) 使用以下代码时,图像中未检测到红色。怎么了 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(
(0,0255)
使用以下代码时,图像中未检测到红色。怎么了
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。其中
只需做一点工作即可:
np.where((img == (0, 0, 255)).all(axis=2))
按照您的示例,您需要创建一个if语句,该语句将在像素为红色时构建像素列表<你帖子中的code>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))
在RGB格式中,红色应为(255,0,0)是,但在cv2中则相反,
r
,red
,redarray
反映最后一个像素值。你想在什么地方有一个if语句吗?还是创建一个不断增长的列表/阵列?@MikhailGenkin根据,CV2不使用RGB,它使用BGR。@忙碌者我想创建一个不断增长的列表/阵列谢谢,我仍然不知道为什么我发布的代码没有检测到红色像素,但是通过你的解决方案,红色像素现在被找到了。如果我想为图像的每个像素确定与特定像素坐标(例如,200 | 200)成直线的红色像素数,是否还有一个没有for循环的解决方案在图片中?我更新了我的帖子,展示了如何在for循环中完成它。关于你的第二个问题,你最好发一个新问题。需要详细说明如何准确定义“直线”等细节。但您可以查看一些opencv函数。这将是一个很好的起点。