Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/286.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/image/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 在图像中查找特定像素值_Python_Image_Numpy_Opencv_For Loop - Fatal编程技术网

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函数。这将是一个很好的起点。