it-swarm.com.ru

Как мне получить доступ к пикселям изображения с помощью OpenCV-Python?

Я хочу знать, как перебрать все пиксели изображения. Я попробовал это:

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

Он печатает вертикальный набор чисел, который не имеет форму массива. Я также получаю массив за пределами исключения. Пожалуйста, предложите метод.

10
Harini Subhakar

Доступ к конкретному пикселю в Python

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

output: [73 89 102]

10
Rohit Salunke

Я не понимаю, какова цель вашей переменной x. Тебе это не нужно.

Просто используйте:

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

который будет печатать действительно вертикальный набор чисел. Если вы хотите изменить значения пикселей, используйте img.itemset(). http://docs.opencv.org/3.0-beta/doc/py_tutorials/py_core/py_basic_ops/py_basic_ops.html

Если вы хотите распечатать весь массив, используйте print(img)

6
Roxanne

Доступ с использованием индекса массива будет медленным с пустым массивом. 

Вы можете использовать метод 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
2
Vivek Ananthan

Попробуй это:

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
Ebenezer James Valdez

Вы можете сделать это

  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

Этот код даст вам значения пикселей в массиве '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
0
Anon George

Вертикальный массив - это значения канала RGB (Reg, Green, Blue) для изображения. Если вам нужно одно значение для пикселя, вы можете сначала преобразовать изображение в оттенки серого. Это действительно зависит от вашего приложения и того, что вы хотите сделать с изображением, конвертация в оттенки серого - это всего лишь один из подходов.

Для преобразования в оттенки серого

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

Некоторые основные операции показаны в документации

0
user3590169

вы читаете изображение в оттенках серого

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

здесь вы получите только интенсивность

0
paparoch