3. Open Source CV image processing and drawing text line segments

3. Open Source CV image processing and drawing text line segments3.1. OpenCV image grayscale processing3.2, OpenCV image binarization3.3, OpenCV image edge detection3.4, OpenCV line drawing3.5, OpenCV draws rectangles3.6, OpenCV draws a circle3.7, OpenCV draws an ellipse3.8, OpenCV draws polygons3.9, OpenCV draws text

3.1. OpenCV image grayscale processing

  1. Image grayscale

The process of converting a color image to a grayscale image is the grayscale processing of the image. The color of each pixel in a color image is determined by the three components R, G, and B, and each component can take a value of 0-255, so that a pixel can have a color range of more than 16 million (256256256=1677256). A grayscale image is a special color image with the same three components R, G, and B, and the range of variation of one pixel is 256. Therefore, in digital image processing, images of various formats are generally converted into grayscale images to reduce the amount of calculation of subsequent images. The description of a grayscale image, like a color image, still reflects the distribution and characteristics of the overall and local chromaticity and highlight levels of the entire image.

  1. Image grayscale processing

Grayscale processing is the process of converting a color image into a grayscale image. Color images are divided into three components: R, G, and B, which respectively show various colors such as red, green, and blue. Grayscale is the process of making the R, G, and B components of color equal. Pixels with large grayscale values ​​are brighter (the maximum pixel value is 255, which is white), and vice versa (the lowest pixel value is 0, which is black).

The core idea of ​​image grayscale is R = G = B, which is also called grayscale value.

1) Maximum value method: Make the converted R, G, and B values ​​equal to the largest of the three values ​​before conversion, that is: R=G=B=max(R, G, B). The grayscale image converted by this method is very bright.

2) Average value method: The values ​​of R, G, and B after conversion are the average values ​​of R, G, and B before conversion. That is: R=G=B=(R+G+B)/3. The grayscale image produced by this method is relatively soft.

In OpenCV, use cv2.cvtColor(img1, cv2.COLOR_BGR2GRAY) to grayscale the image

  1. Code and actual effect display

image-20220215141134983

3.2, OpenCV image binarization

1, Binarization core idea

Set a threshold, and the value greater than the threshold is 0 (black) or 255 (white), so that the image is called a black and white image. The threshold can be fixed or adaptive. The adaptive threshold is generally a comparison between a pixel and the average value of the pixels in the region with this point as the middle order or the weighted sum of the Gaussian distribution, in which a difference value can be set or not.

  1. Python-OpenCV provides a threshold function: cv2.threshold (src, threshold, maxValue, thresholdType)

Parameter meaning:

src: original image

threshold: current threshold

maxVal: maximum threshold, generally 255

thresholdType: threshold type, generally has the following values

enum ThresholdTypes { THRESH_BINARY = 0, #The grayscale value of pixels greater than the threshold is set to maxValue (such as the maximum 8-bit grayscale value is 255), and the grayscale value of pixels less than the threshold is set to 0. THRESH_BINARY_INV = 1, #The grayscale value of pixels greater than the threshold is set to 0, and that less than the threshold is set to maxValue. THRESH_TRUNC = 2, #The grayscale value of pixels greater than the threshold is set to 0, and that less than the threshold is set to maxValue. THRESH_TOZERO = 3, #No change is made to the grayscale value of the pixel point that is less than the threshold, and the grayscale value of the pixel point that is greater than the threshold is all changed to 0. THRESH_TOZERO_INV = 4 #No change is made to the grayscale value of the pixel point that is greater than the threshold, and the grayscale value of the pixel point that is less than the threshold is all changed to 0. }

Return value:

retval: consistent with the parameter thresh

dst: result image

Note: Before binarization, we need to grayscale the color image to obtain a grayscale image.

  1. Code and actual effect display

image-20220215141201090

3.3, OpenCV image edge detection

  1. The purpose of image edge detection

While retaining the original image properties, the data size of the image is significantly reduced. There are currently many algorithms for edge detection. Although the Canny algorithm is old, it can be said that it is a standard algorithm for edge detection and is still widely used in research.

  1. Canny edge detection algorithm

Among the commonly used edge detection methods, the Canny edge detection algorithm is one of the methods with strict definitions that can provide good and reliable detection. Because it meets the three criteria of edge detection and has the advantages of simple implementation process, it has become one of the most popular algorithms for edge detection.

The Canny edge detection algorithm can be divided into the following 5 steps:

(1). Use Gaussian filter to smooth the image and filter out noise

(2). Calculate the gradient strength and direction of each pixel in the image

(3). Apply non-maximum suppression to eliminate the stray response caused by edge detection

(4). Apply double threshold detection to determine the real and potential edges

(5). Finally complete the edge detection by suppressing isolated weak edges

  1. How do we implement it in OpenCV? Very simple, divided into three steps

(1). Image grayscale: gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)

(2). Gaussian filter (noise reduction) image: GaussianBlur (src, ksize, sigmaX [, dst [, sigmaY [, borderType]]]) -> dst

Parameter meaning:

src: input image, usually a grayscale image

ksize: Gaussian kernel size

sigmaX: Gaussian kernel standard deviation in the X direction

sigmaY: Gaussian kernel standard deviation in the Y direction

dst: processed image

(3). Image processed by Canny method: edges = cv2.Canny( image, threshold1, threshold2[, apertureSize[, L2gradient]])

Parameter meaning:

edges: calculated edge image

image : The calculated edge image, usually the image obtained after Gaussian processing

threshold1 : The first threshold in the processing process

threshold2 : The second threshold in the processing process

apertureSize : The aperture size of the Sobel operator

L2gradient : The default value of the gradient magnitude of the calculated image is False. If True, the more accurate L2 norm is used for calculation (that is, the square root of the sum of the squares of the derivatives in two directions), otherwise the L1 norm is used (directly adding the absolute values ​​of the derivatives in two directions).

  1. Code and actual effect display

image-20220215141242424

3.4, OpenCV line drawing

  1. When using OpenCV to process images, we sometimes need to draw line segments, rectangles, etc. on the image. In OpenCV, use the

cv2.line(dst,pt1,pt2,color,thickness=None,lineType=None,shift=None)function to draw line segments.

Parameter meaning:

dst: output image.

pt1,pt2: required parameters. The coordinate points of the line segment represent the starting point and the ending point respectively

color: a required parameter. Used to set the color of the line segment

thickness: an optional parameter. Used to set the width of the line segment

lineType: an optional parameter. Used to set the type of line segment, optional 8 (8 adjacent connecting lines - default), 4 (4 adjacent connecting lines) and cv2.LINE_AA for anti-aliasing

  1. Code and actual effect display

image-20220215141312150

3.5, OpenCV draws rectangles

  1. In OpenCV, the method used to draw rectangles is

cv2.rectangle(img,pt1,pt2,color,thickness=None,lineType=None,shift=None)

Parameter meaning:

img: canvas or carrier image

pt1, pt2: required parameters. The vertices of the rectangle represent the vertex and the diagonal vertex, that is, the upper left corner and the lower right corner of the rectangle (these two vertices can determine a unique rectangle), which can be understood as diagonal lines.

color: required parameter. Used to set the color of the rectangle

thickness: optional parameter. Used to set the width of the rectangle side. When the value is negative, it means that the rectangle is filled

lineType: optional parameter. Used to set the type of line segment, optional 8 (8 adjacent connecting lines - default), 4 (4 adjacent connecting lines) and cv2.LINE_AA for anti-aliasing

  1. Code and effect display

image-20220215141335427

3.6, OpenCV draws a circle

  1. In OpenCV, the circle is drawn using

cv2.circle(img, center, radius, color[,thickness[,lineType]])

Parameter meaning:

img: drawing or carrier image

center: circle center coordinates, format: (50,50)

radius: radius

thickness: line thickness. The default is 1. If -1, it is filled solid

lineType: line type. The default is 8, connection type. As shown in the following table

ParameterDescription
cv2.FILLEDFill
cv2.LINE_44-connection type
cv2.LINE_88-connection type
cv2.LINE_AAAnti-aliasing, this parameter will make the line smoother
  1. Code and actual effect display

image-20220215141412142

3.7, OpenCV draws an ellipse

  1. In OpenCV, the method used to draw an ellipse is

cv2.ellipse(img, center, axes, angle, StartAngle, endAngle, color[,thickness[,lineType]

Parameter meaning:

center: the center point of the ellipse, (x, y)

axes: refers to the short radius and the long radius, (x, y)

StartAngle: the angle of the arc start angle

endAngle: the angle of the arc end angle

img, color, thickness, lineType can refer to the description of the circle

  1. Code and actual effect display

image-20220215141436593

3.8, OpenCV draws polygons

  1. In OpenCV, polygons are drawn using

cv2.polylines(img,[pts],isClosed, color[,thickness[,lineType]])

Parameter meaning:

pts: vertices of the polygon

isClosed: whether it is closed. (True/False)

Other parameters refer to the circle drawing parameters

  1. Code and actual effect display

image-20220215141652060

3.9, OpenCV draws text

  1. In OpenCV, the text is drawn using

cv2.putText(img, str, origin, font, size,color,thickness)

Parameter meaning:

img: input image

str: drawn text

origin: upper left corner coordinate (integer), which can be understood as where the text starts

font: font

size: font size

color: font color

thickness: font thickness

Font is optional

image-20220215141713129

  1. Code and actual effect display

image-20220215141734040