Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/opencv/3.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
如何使用OpenCV Python访问图像的像素?_Python_Opencv_Image Processing_Pixels - Fatal编程技术网

如何使用OpenCV Python访问图像的像素?

如何使用OpenCV Python访问图像的像素?,python,opencv,image-processing,pixels,Python,Opencv,Image Processing,Pixels,我想知道如何循环通过图像的所有像素。我试过这个: import cv2 import numpy as np x = np.random.randint(0,5,(500,500)) img = cv2.imread('D:\Project\Capture1.jpg',0) p = img.shape print p rows,cols = img.shape for i in range(rows): for j in range(cols): k = x[i,j]

我想知道如何循环通过图像的所有像素。我试过这个:

import cv2
import numpy as np

x = np.random.randint(0,5,(500,500))
img = cv2.imread('D:\Project\Capture1.jpg',0)
p = img.shape
print p
rows,cols = img.shape

for i in range(rows):
    for j in range(cols):
        k = x[i,j]
        print k

它打印的是一组非数组形式的垂直数字。我还得到了一个数组越界异常。请建议一种方法。

垂直阵列是图像的RGB(Reg、绿色、蓝色)通道值。如果需要像素的单个值,可能需要先将图像转换为灰度。这实际上取决于您的应用程序以及您想对图像做什么,转换为灰度只是一种方法

转换为灰度

grayImg = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)

Python中的访问特定像素中显示了一些基本操作

import cv2
image = cv2.imread("sample.jpg")
pixel= image[200, 550]
print pixel

输出:[73 89 102]

我不知道x变量的用途是什么。你不需要它

只需使用:

img = cv2.imread('D:\Project\Capture1.jpg',0)
rows,cols = img.shape

    for i in range(rows):
      for j in range(cols):
         k = img[i,j]
         print k
这将打印出一组垂直的数字。如果要修改像素值,请使用
img.itemset()

如果要打印整个阵列,请使用
print(img)

尝试以下操作:

import numpy as np
import Image

image = Image.open("example.png")
image_data = np.asarray(image)

for i in range(len(image_data)):
    for j in range(len(image_data[0])):
        print(image_data[i][j])  # this row prints an array of RGB color for each pixel in the image

您正在读取灰度图像

img=cv2.imread('D:\Project\Capture1.jpg',0)


这里您将只获得intencity

此代码将通过循环为您提供数组中的像素值'k'

import cv2
import numpy as np

img = cv2.imread('sample.jpg',0)
rows,cols = img.shape
k = []
for i in range(rows):
    for j in range(cols):
        k.append(img[i,j])
print k

使用数组索引访问numpy数组会很慢

您可以使用
item()
方法进行访问,使用
itemset
进行更改

比如说

for i in range(0,img.shape[0]):
    for j in range(0,img.shape[1]):
        pixel = img.item(i, j)
        print pixel
你可以这样做

  for (int y = 0; y<im.rows; y++) 
    {

  for (int x = 0; x<im.cols; x++)
    {
        Vec3b color = im.at<Vec3b>(Point(x, y));
        //you can print color this has the pixel value

    }
}

for(int y=0;y)你能解释为什么这是解决方案吗?OP遗漏了什么,他需要知道什么才能理解这个解决方案?图像是0索引这如何回答问题?
pixel_b,pixel_g,pixel_r=image[行][列]
顺序是BGR,而不是你说的RGB。请注意,当转换为灰度时,常数是XXX_*BGR*2GRAYHi,我知道这已经很久了,我对垂直数字集有一个问题。是因为它是灰度,所以它垂直打印一个单独的值吗?
  for (int y = 0; y<im.rows; y++) 
    {

  for (int x = 0; x<im.cols; x++)
    {
        Vec3b color = im.at<Vec3b>(Point(x, y));
        //you can print color this has the pixel value

    }
}
import cv2
import numpy as np

imagename = "capure.jpg"
img = cv2.imread(imagename, 0) # 0 params, for gray image
height, width = img.shape[:2]  # image height and width
print(img)  # all image pixels value in array
print(img[10, 10])  # one pixel value in 10,10 coordinate

for y in range(height):
    for x in range(width):
        print(img[y,x], end = "\t")
    print("\t")