Ответ 1
Доступ к определенному пикселю в Python
import cv2
image = cv2.imread("sample.jpg")
pixel= image[200, 550]
print pixel
: [73 89 102]
Я хочу знать, как перебрать все пиксели изображения. Я попробовал это:
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
Он печатает вертикальный набор чисел, который не имеет форму массива. Я также получаю массив за пределами исключения. Пожалуйста, предложите метод.
Доступ к определенному пикселю в Python
import cv2
image = cv2.imread("sample.jpg")
pixel= image[200, 550]
print pixel
: [73 89 102]
Я не понимаю, какова цель вашей переменной 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)
Доступ с использованием индекса массива будет медленным с пустым массивом.
Вы можете использовать метод 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
Попробуйте следующее:
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
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
Вы можете сделать это
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
}
}
Вертикальный массив - это значения канала RGB (Reg, Green, Blue) для изображения. Если вам нужно одно значение для пикселя, вы можете сначала преобразовать изображение в оттенки серого. Это действительно зависит от вашего приложения и того, что вы хотите сделать с изображением, преобразование в оттенки серого - это всего лишь один подход.
Чтобы преобразовать в оттенки серого
grayImg = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
Некоторые основные операции показаны в документации
вы читаете изображение в шкале серого
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
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[x], img[y], end = "\t")