问题
I want to know how to loop through all pixels of an image. I tried this:
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
It prints a vertical set of numbers which is not in the form of an array. I am also getting an array out of bounds exception. Please suggest a method.
回答1:
Access specific pixel in Python
import cv2
image = cv2.imread("sample.jpg")
pixel= image[200, 550]
print pixel
output: [ 73 89 102]
回答2:
I don't see what's the purpose of your x variable. You don't need it.
Simply use:
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
which will print indeed a vertical set of numbers. If you want to modify the values of the pixels use img.itemset()
. http://docs.opencv.org/3.0-beta/doc/py_tutorials/py_core/py_basic_ops/py_basic_ops.html
If you want to print the whole array then use print(img)
回答3:
Accessing using array index will be slow with a numpy array.
You can use the item()
method for access and itemset
for performing changes.
For example
for i in range(0,img.shape[0]):
for j in range(0,img.shape[1]):
pixel = img.item(i, j)
print pixel
回答4:
Try this:
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
回答5:
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
回答6:
You can do this
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
}
}
回答7:
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")
回答8:
The vertical array are the RGB (Reg, Green, Blue) channel values for the image. If you want a single value for the pixel you may want to convert the image to grayscale first. It really depends on your application and what you want to do with the image, converting to grayscale is just one approach.
To convert to grayscale
grayImg = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
Some basic operations are shown in the documentation
回答9:
you are reading image in gray scale
img = cv2.imread('D:\Project\Capture1.jpg',0)
here you will only get intencity
回答10:
This code will give you the pixel values in an array 'k' by going through loop.
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
来源:https://stackoverflow.com/questions/28981417/how-do-i-access-the-pixels-of-an-image-using-opencv-python