it-swarm.com.de

Wie kann ich mit OpenCV-Python auf die Pixel eines Bildes zugreifen?

Ich möchte wissen, wie alle Pixel eines Bildes durchlaufen werden. Ich habe das versucht:

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

Es druckt einen vertikalen Satz von Zahlen, der nicht in Form eines Arrays vorliegt. Ich bekomme auch ein Array aus der Ausnahme. Bitte eine Methode vorschlagen.

10
Harini Subhakar

Zugriff auf bestimmte Pixel in Python

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

output: [73 89 102]

10
Rohit Salunke

Ich sehe nicht, was der Zweck Ihrer x-Variablen ist. Du brauchst es nicht.

Verwenden Sie einfach:

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

was in der Tat einen vertikalen Satz von Zahlen drucken wird. Wenn Sie die Werte der Pixel ändern möchten, verwenden Sie img.itemset(). http://docs.opencv.org/3.0-beta/doc/py_tutorials/py_core/py_basic_ops/py_basic_ops.html

Wenn Sie das gesamte Array drucken möchten, verwenden Sie print(img)

6
Roxanne

Der Zugriff über den Array-Index wird bei einem numpy-Array langsam. 

Sie können die item()-Methode für den Zugriff und itemset für die Durchführung von Änderungen verwenden.

Zum Beispiel 

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

Versuche dies:

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

Du kannst das

  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

Dieser Code gibt Ihnen die Pixelwerte in einem Array 'k' durch die Schleife.

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

Das vertikale Array enthält die RGB-Kanalwerte (Reg, Green, Blue) für das Bild. Wenn Sie einen einzelnen Wert für das Pixel wünschen, müssen Sie das Bild zuerst in Graustufen konvertieren. Das hängt wirklich von Ihrer Anwendung ab und davon, was Sie mit dem Bild machen möchten. Das Konvertieren in Graustufen ist nur ein Ansatz.

In Graustufen konvertieren

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

Einige grundlegende Operationen werden in der Dokumentation gezeigt.

0
user3590169

sie lesen ein Bild in Graustufen

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

hier wirst du nur Intensität bekommen

0
paparoch