In this article, we will discuss Getting and Setting Pixels through OpenCV in Python.
Image is made up of pixels. A pixel will be denoted as an array. The 3 integers represent the intensity of red, green, blue in the same order. Eg. [0,0,0] in RGB mode represent black color. There are other modes as well-
- HSV
- Grayscale
- CMY
Image can be read using imread() function which returns the matrix of pixels (default is RGB mode).
Image Used:
Syntax:
For Image shape: image.shape For getting a pixel: image[row][col] For setting a pixel: image[row][col] = [r,g,b]
Example 1: Python code to display image details
# import cv2 module import cv2
# resd the image img = cv2.imread( 'image.png' )
# shape prints the tuple (height,weight,channels) print (img.shape)
# img will be a numpy array of the above shape print (img)
|
Output:
(225, 225, 3) [[[ 87 157 14] [ 87 157 14] [ 87 157 14] ... [ 87 157 14] [ 87 157 14] [ 87 157 14]] [[ 87 157 14] [ 87 157 14] [ 87 157 14] ... [ 87 157 14] [ 87 157 14] [ 87 157 14]] ... [[ 72 133 9] [ 72 133 9] [ 72 133 9] ... [ 87 157 14] [ 87 157 14] [ 87 157 14]] [[ 72 133 9] [ 72 133 9] [ 72 133 9] ... [ 87 157 14] [ 87 157 14] [ 87 157 14]]]
Here 225*225 pixels are there and every pixel is an array of 3 integers (Red, Green, Blue).
Example 2: In this example, The single pixel can be extracted using indexing.
import cv2
# read the image img = cv2.imread( 'image.png' )
# this is pixel of 0th row and 0th column print (img[ 0 ][ 0 ])
|
Output:
[ 87 157 14]
Example 3: Python code to make the black cross on the image.
For that we will extract all (i,j) such that i==j or i+j == image width and for all pixels with index (i,j), the value of the pixel will set to [0,0,0].
# import the cv2 package import cv2
# read the image img = cv2.imread( 'image.png' )
for i, row in enumerate (img):
# get the pixel values by iterating
for j, pixel in enumerate (img):
if (i = = j or i + j = = img.shape[ 0 ]):
# update the pixel value to black
img[i][j] = [ 0 , 0 , 0 ]
# display image cv2.imshow( "output" , img)
cv2.imwrite( "output.png" , img)
|
Output:
Example 4: Get grayscale then the pixel will just be a number representing the intensity of white.
import cv2
img = cv2.imread( 'image.png' , 0 )
# shape prints the tuple (height,weight,channels) print ( "image shape = " , img.shape)
# img will be a numpy array of the above shape print ( "image array = " , img)
print ( "pixel at index (5,5): " , img[ 5 ][ 5 ])
|
Grayscale Image:
Output:
image shape = (225, 225) image array = [[106 106 106 ... 106 106 106] [106 106 106 ... 106 106 106] [106 106 106 ... 106 106 106] ... [ 88 88 88 ... 106 106 106] [ 88 88 88 ... 106 106 106] [ 88 88 88 ... 106 106 106]] pixel at index (5,5): 106