Working with Color Channel of Image in OpenCV Python

Read shape of image

image:np.ndarray = cv2.imread("cow.jpg")
print(image.shape)

Output

(559, 838, 3)

Show one channel

image: np.ndarray = cv2.imread("cow.jpg")
# channels : BGR => 0,1,2
image2 = image[:, :, 1] # show channel 1 which is Green
cv2.imshow("image", image2)

cv2.waitKey(0)
cv2.destroyAllWindows()

Manipulate channel

image: np.ndarray = cv2.imread("cow.jpg")
image2 = image.copy()
# channels : BGR => 0,1,2
# Here we want to show only Red channel
image2[:, :, 0] = 0
image2[:, :, 1] = 0
cv2.imshow("image", image2)

cv2.waitKey(0)
cv2.destroyAllWindows()

References
https://github.com/mhdr/OpenCV/tree/master/006

Basic NumPy for working with OpenCV

Create an array from a list

my_list = [1, 2, 3]
my_array = np.array(my_list)

Create an array with arrange

my_array = np.arange(0, 10)
my_array2 = np.arange(0, 10, 2) # with step 2

Create an array with zeros

my_array = np.zeros((2, 3)) # default type if float
my_array2 = np.zeros((2, 3), np.int32) # with type int

Create an array with ones

my_array = np.ones((10, 8), np.int32)

Create an array from random

np.random.seed(101)
array1 = np.random.randint(0, 100, 10)
array2=np.random.randint(0,100,10)

Max, Min, Mean

np.random.seed(101)
array1 = np.random.randint(0, 100, 10)
print(array1.max())
print(array1.argmax()) # index of max value
print(array1.min())
print(array1.argmin()) # index of min value
print(array1.mean())

Indexing an array

matrix = np.arange(0, 100).reshape(10, 10)
print(matrix)

print(matrix[2,3])

row = 1
col = 4
print(matrix[row,col])

Manipulating an array

matrix = np.arange(0, 100).reshape(10, 10)
print(matrix)

matrix[0:3, 0:3] = 0
print(matrix)

Copying an array

matrix: np.ndarray = np.arange(0, 100).reshape(10, 10)
print(matrix)

matrix2 = matrix.copy()
matrix2[0:3, 0:3] = 0
print(matrix2)

Slicing an array

matrix = np.arange(0, 100).reshape(10, 10)

print(matrix[1, :])  # whole row 1
print(matrix[:, 1])  # whole col 1
print(matrix[1, 1:4])  # row 1 from col 1 to 4
print(matrix[1:4, 1])  # col 1 from row 1 to 4

new_matrix: np.ndarray = matrix[1, :]
print(new_matrix.reshape(5, 2))

Reshaping an array

np.random.seed(101)
array1 = np.random.randint(0, 100, 10)
print(array1)
print(array1.shape)

array2 = array1.reshape((2, 5))
print(array2)
print(array2.shape)

References
https://www.tutorialspoint.com/numpy/index.htm

Image Operations with OpenCV Python

Read Pixel

import cv2
import numpy as np
import pprint

image = cv2.imread('cow.jpg',cv2.IMREAD_COLOR)
pixel= image[55,55]
pprint.pprint(pixel)

Change Pixel

import cv2
import numpy as np
import pprint

image = cv2.imread('cow.jpg', cv2.IMREAD_COLOR)
image[55, 55] = [255, 255, 255]
pixel = image[55, 55]
pprint.pprint(pixel)

Change the color of Region of Image

import cv2
import numpy as np
import pprint

image = cv2.imread('cow.jpg', cv2.IMREAD_COLOR)
image[150:200, 100:150] = [255, 255, 255]
cv2.imshow("image", image)
cv2.waitKey(0)
cv2.destroyAllWindows()

Image Characteristics 

import cv2
import numpy as np
import pprint

image = cv2.imread('cow.jpg', cv2.IMREAD_COLOR)
print(image.shape)
print(image.size)
print(image.dtype)

Copy Paste Region

import cv2
import numpy as np
import pprint

image = cv2.imread('cow.jpg', cv2.IMREAD_COLOR)

watch_face = image[200:250,107:194]
image[0:50,0:87] = watch_face

cv2.imshow('image',image)
cv2.waitKey(0)
cv2.destroyAllWindows()

References
https://pythonprogramming.net/image-operations-python-opencv-tutorial/
https://www.youtube.com/watch?v=1pzk_DIL_wo&list=PLQVvvaa0QuDdttJXlLtAJxJetJcqmqlQq&index=4
https://github.com/mhdr/OpenCV/tree/master/004

Drawing and Writing on Image with OpenCV Python

Drawing Line

# Draw a diagonal blue line with thickness of 5 px
cv.line(img,(0,0),(511,511),(255,0,0),5)

Drawing Rectangle

cv.rectangle(img,(384,0),(510,128),(0,255,0),3)

Drawing Circle

cv.circle(img,(447,63), 63, (0,0,255), -1)

Drawing Ellipse

cv.ellipse(img,(256,256),(100,50),0,0,180,255,-1)

Drawing Polygon

pts = np.array([[10,5],[20,30],[70,20],[50,10]], np.int32)
pts = pts.reshape((-1,1,2))
cv.polylines(img,[pts],True,(0,255,255))

Adding Text to Images

font = cv.FONT_HERSHEY_SIMPLEX
cv.putText(img,'OpenCV',(10,500), font, 4,(255,255,255),2,cv.LINE_AA)

References
https://docs.opencv.org/4.0.1/dc/da5/tutorial_py_drawing_functions.html
https://www.youtube.com/watch?v=U6uIrq2eh_o&list=PLQVvvaa0QuDdttJXlLtAJxJetJcqmqlQq&index=3
https://pythonprogramming.net/drawing-writing-python-opencv-tutorial/
https://github.com/mhdr/OpenCV/tree/master/003

Capture Video and Save it using OpenCV Python

cap = cv2.VideoCapture(0)
fourcc = cv2.VideoWriter_fourcc(*'XVID') # specify the codec
out=cv2.VideoWriter('output.avi',fourcc,20.0,(640,480))

while True:
    ret, frame = cap.read()
    cv2.imshow("frame", frame)
    out.write(frame)

    # exit video capture
    if cv2.waitKey(1) & 0xFF == ord("q"):
        break

cap.release()
out.release()
cv2.destroyAllWindows()

References
https://www.youtube.com/watch?v=Jvf5y21ZqtQ
https://github.com/mhdr/OpenCV/tree/master/002

GUI automation in Python

import pyautogui
screenWidth, screenHeight = pyautogui.size()
currentMouseX, currentMouseY = pyautogui.position()
pyautogui.moveTo(100, 150)
pyautogui.click()
pyautogui.moveRel(None, 10)  # move mouse 10 pixels down
pyautogui.doubleClick()
pyautogui.moveTo(500, 500, duration=2, tween=pyautogui.easeInOutQuad)  # use tweening/easing function to move mouse over 2 seconds.
pyautogui.typewrite('Hello world!', interval=0.25)  # type with quarter-second pause in between each key
pyautogui.press('esc')
pyautogui.keyDown('shift')
pyautogui.press(['left', 'left', 'left', 'left', 'left', 'left'])
pyautogui.keyUp('shift')
pyautogui.hotkey('ctrl', 'c')

References
https://pyautogui.readthedocs.io/en/latest/introduction.html