Welcome to DOFBOT-Ultra repository
11. Picture Rotation
Picture Rotation
Image rotation refers to the process of rotating an image by a certain angle around a position. During rotation, the image retains its original dimensions. After rotation, the horizontal symmetry axis, vertical symmetry axis, and center coordinate origin of the image may all change, so coordinate conversion during image rotation is necessary. As shown below:

Assuming the image rotates counterclockwise by θ, the rotation transformation based on coordinate conversion is:

And

Substituting (2) into (1) gives:

That is:

And the grayscale value of the rotated image equals the grayscale value at the corresponding position in the original image, as follows:
f(x′,y′)=f(x,y)
The above is the principle of rotation, but the API provided by OpenCV can directly obtain the transformation matrix through a function. The syntax of this function is:
matRotate = cv2.getRotationMatrix2D(center, angle, scale)
center: The center point of rotation
angle: The angle of rotation. Positive numbers are counterclockwise; negative numbers are clockwise.
scale: Transformation scale (zoom size). 1 means no change, less than 1 shrinks, greater than 1 enlarges.
Code path:
~/dofbot_opencv/scripts/2.Transform/06_rotation.ipynb
xxxxxxxxxximport cv2import numpy as npimg = cv2.imread('yahboom.jpg',1)#cv2.imshow('src',img)imgInfo = img.shapeheight = imgInfo[0]width = imgInfo[1]matRotate = cv2.getRotationMatrix2D((height*0.5, width*0.5), 45, 1)# mat rotate 1 center 2 angle 3 scale#100*100 25 dst = cv2.warpAffine(img, matRotate, (height,width))Below, the JupyterLab widget displays a comparison of the original image and the rotated image:
xxxxxxxxxx#bgr8 to jpeg formatimport enumimport cv2def bgr8_to_jpeg(value, quality=75): return bytes(cv2.imencode('.jpg', value)[1])ximport ipywidgets.widgets as widgetsimage_widget1 = widgets.Image(format='jpg', )image_widget2 = widgets.Image(format='jpg', )# create a horizontal box container to place the image widget next to eachotherimage_container = widgets.HBox([image_widget1, image_widget2])# display the container in this cell's outputdisplay(image_container)#display(image_widget2)img1 = cv2.imread('image0.jpg',1)image_widget1.value = bgr8_to_jpeg(img1) image_widget2.value = bgr8_to_jpeg(dst)