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
Python3
# 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.
Python3
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].
Python3
# 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.
Python3
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