web-dev-qa-db-fra.com

Comment accéder aux pixels d'une image à l'aide d'OpenCV-Python?

Je veux savoir comment parcourir en boucle tous les pixels d'une image. J'ai essayé ceci:

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

Il imprime un ensemble vertical de nombres qui ne se présente pas sous la forme d'un tableau. Je reçois également un tableau hors exception. S'il vous plaît suggérer une méthode.

10
Harini Subhakar

Accéder à un pixel spécifique en Python

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

sortie: [73 89 102]

10
Rohit Salunke

Je ne vois pas quel est le but de votre variable x. Tu n'en as pas besoin.

Utilisez simplement:

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

qui imprimera en effet un ensemble vertical de nombres. Si vous souhaitez modifier les valeurs des pixels, utilisez img.itemset(). http://docs.opencv.org/3.0-beta/doc/py_tutorials/py_core/py_basic_ops/py_basic_ops.html

Si vous voulez imprimer le tableau entier, utilisez print(img)

6
Roxanne

L'accès à l'aide d'un index de tableau sera lent avec un tableau numpy. 

Vous pouvez utiliser la méthode item() pour accéder et itemset pour effectuer des modifications.

Par exemple 

for i in range(0,img.shape[0]):
    for j in range(0,img.shape[1]):
        pixel = img.item(i, j)
        print pixel
2
Vivek Ananthan

Essaye ça:

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
2
Be'ezrat Hashem
    import cv2
    import numpy as np 

    image = cv2.imread('C:/Users/Asus/Desktop/test.jpg', cv2.IMREAD_COLOR)

    for x in range (1,480):
        for y in range (1,640):

            pixel = image[x,y]
            print pixel
1

Tu peux le faire

  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

    }
}
1
Muskan Agarwal

Ce code vous donnera les valeurs de pixels dans un tableau 'k' en passant par boucle.

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
0
Anon George

Le tableau vertical correspond aux valeurs de canal RVB (Reg, Vert, Bleu) de l’image. Si vous voulez une valeur unique pour le pixel, vous voudrez peut-être d'abord convertir l'image en niveaux de gris. Cela dépend vraiment de votre application et de ce que vous voulez faire avec l'image. La conversion en niveaux de gris n'est qu'une approche.

Pour convertir en niveaux de gris

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

Certaines opérations de base sont indiquées dans documentation

0
user3590169

vous lisez l'image en niveaux de gris

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

ici tu n'auras que l'intencity

0
paparoch