【学习OpenCV4】OpenCV绘制标记/线/矩形/文字/圆等

本文分享内容来自图书《学习OpenCV 4:基于Python的算法实战》,该书内容如下:

1章 OpenCV快速入门;
第2章 图像读写模块imgcodecs;
第3章 核心库模块core;
第4章 图像处理模块imgproc(一);
第5章 图像处理模块imgproc(二);
第6章 可视化模块highgui;
第7章 视频处理模块videoio;
第8章 视频分析模块video;
第9章 照片处理模块photo;
第102D特征模块features2d;
第11章 相机标定与三维重建模块calib3d;
第12章 传统目标检测模块objdetect;
第13章 机器学习模块ml;
第14章 深度神经网络模块dnn

欢迎关注图书《深度学习计算机视觉实战》与《学习OpenCV4:基于Python的算法实战》,欢迎加入QQ群:187042448


图像处理中,经常需要在图像上将处理结果绘制出来,如目标检测种的检测结果可以用矩形框标识出来,OpenCV种提供了众多的绘制操作,如在图像上绘制标记,绘制直线、矩形、圆、椭圆、文字等。

4.4.1 案例34:绘制标记

OpenCV中提供了绘制标记的函数drawMarker,读者可以使用该函数在图像上标记一个点,该函数的定义如下:

img = drawMarker(img, position, color, markerType=None, markerSize=None, thickness=None, line_type=None)

参数说明如下:
img,待标记的输入图像(返回值);
position,标记绘制的位置,需传入整型坐标位置;
color,标记的绘制颜色;
markerType,标记绘制类型,由MarkerTypes定义(见4.1节);
markerSize,标记的轴向长度;
thickness,标记线的粗细;
line_type,线型,由LineTypes定义(见4.1节)。
本案例在图像中的五个不同位置绘制了不同的标记,案例代码如下:

import cv2

#图像读取
src = cv2.imread("src.jpg")
#绘制标记
draw_marker = cv2.drawMarker(src, (256, 256), (255, 0, 0), cv2.MARKER_CROSS, thickness=3)
draw_marker = cv2.drawMarker(draw_marker, (50, 50), (0, 255, 0), cv2.MARKER_STAR, thickness=3)
draw_marker = cv2.drawMarker(draw_marker, (400, 400), (0, 0, 255), cv2.MARKER_DIAMOND, thickness=3)
draw_marker = cv2.drawMarker(draw_marker, (50, 400), (255, 255, 0), cv2.MARKER_SQUARE, thickness=3)
draw_marker = cv2.drawMarker(draw_marker, (400, 50), (255, 0, 255), cv2.MARKER_TILTED_CROSS, thickness=3)
#图像显示
cv2.imshow("draw_marker", draw_marker)
cv2.waitKey(0)
cv2.destroyAllWindows()

绘制后的结果如图4.3所示。
在这里插入图片描述

图4.3

4.4.2 案例30:绘制线

OpenCV中提供的直线绘制函数为line,该函数的定义如下:

img = line(img, pt1, pt2, color, thickness=None, lineType=None, shift=None)

参数说明如下:
img,待绘制的输入图像(返回值);
pt1,绘制直线的第一个点;
pt2,绘制直线的第二个点;
color,绘制的直线的颜色;
thickness,绘制的直线的粗细;
lineType,线型,由LineTypes定义(见4.1节);
shift,点坐标中的小数位数。
本案例在点 (50, 50)和点(450, 450)之间绘制了一条粗细为3像素的红色直线,代码如下:

import cv2

#图像读取
src = cv2.imread("src.jpg")
#绘制直线
draw_line = cv2.line(src, (50, 50), (450, 450), (0, 0, 255), thickness=3)
#图像显示
cv2.imshow("draw_line", draw_line)
cv2.waitKey(0)
cv2.destroyAllWindows()

绘制的结果如图4.4所示。
在这里插入图片描述

图4.4

4.4.3 案例31:绘制矩形

OpenCV中提供的矩形绘制的函数rectangle,该函数的定义如下:

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

参数说明如下:
img,待绘制的输入图像(返回值);
pt1,矩形的顶点;
pt2,与pt1相对的矩形的顶点;
color,绘制矩形的线的颜色;
thickness,绘制线的粗细;
lineType,线型,由LineTypes定义(见4.1节);
shift,点坐标中的小数位数。
本节案例在顶点(50, 50)和顶点(450, 450)之间绘制一个粗细为3像素的红色矩形框,绘制代码如下:

import cv2

#图像读取
src = cv2.imread("src.jpg")
#绘制矩形
draw_rectangle = cv2.rectangle(src, (50, 50), (450, 450), (0, 0, 255), thickness=3)
#图像显示
cv2.imshow("draw_line", draw_rectangle)
cv2.waitKey(0)
cv2.destroyAllWindows()

绘制结果如图4.5所示。
在这里插入图片描述

图4.5

4.4.4 案例32:绘制圆

OpenCV中提供的圆绘制的函数circle,该函数的定义如下:

img = circle(img, center, radius, color, thickness=None, lineType=None, shift=None)

参数说明如下:
img,待绘制的输入图像(返回值);
center,圆心坐标;
radius,圆的半径;
color,绘制圆的线的颜色;
thickness,绘制线的粗细;
lineType,线型,由LineTypes定义(见4.1节);
shift,点坐标中的小数位数。
本案例在圆心位置(256, 256)绘制一个半径为200、线粗细为3像素的红色圆,并标记了圆心位置,绘制代码如下:

import cv2

#图像读取
src = cv2.imread("src.jpg")
#绘制圆
draw_circle = cv2.circle(src, (256, 256), 200, (0, 0, 255), thickness=3)
#标记圆心
draw_circle = cv2.drawMarker(draw_circle, (256, 256), (255, 0, 0), cv2.MARKER_CROSS, thickness=3)
#图像显示
cv2.imshow("draw_circle", draw_circle)
cv2.waitKey(0)
cv2.destroyAllWindows()

绘制结果如图4.6所示。
在这里插入图片描述

图4.6

4.4.5 案例33:绘制椭圆

OpenCV中提供的椭圆绘制的函数ellipse,该函数的定义如下:

img = ellipse(img, center, axes, angle, startAngle, endAngle, color, thickness=None, lineType=None, shift=None)

参数说明如下:
img,待绘制的输入图像(返回值);
center,椭圆圆心坐标;
axes,主轴尺寸的一半;
angle,椭圆旋转角度;
startAngle,椭圆圆弧的起始角度;
endAngle,椭圆圆弧的终止角度;
color,绘制椭圆的线的颜色;
thickness,绘制线的粗细;
lineType,线型,由LineTypes定义(见4.1节);
shift,点坐标中的小数位数。
本节案例选择椭圆的圆心位置(256, 256),绘制的椭圆的长短轴的长度的一半分别为250、150,旋转角度为45度,圆弧起始角度为0,终止角度为360,线颜色为红色,线粗细为3像素,并标记了椭圆圆心位置,绘制代码如下:

import cv2

#图像读取
src = cv2.imread("src.jpg")
#绘制椭圆
draw_ellipse = cv2.ellipse(src, (256, 256), (250, 150), 45, 0, 360, (0, 0, 255), thickness=3)
#标记圆心
draw_ellipse = cv2.drawMarker(draw_ellipse, (256, 256), (255, 0, 0), cv2.MARKER_CROSS, thickness=3)
#图像显示
cv2.imshow("draw_ellipse", draw_ellipse)
cv2.waitKey(0)
cv2.destroyAllWindows()

绘制结果如图4.7所示。
在这里插入图片描述

图4.7

4.4.6 案例35:绘制文字

图像处理中经常需要对图像增加一些说明性的文字,OpenCV提供了文字绘制的函数putText,函数的定义如下:

img = putText(img, text, org, fontFace, fontScale, color, thickness=None, lineType=None, bottomLeftOrigin=None)

参数说明如下:
img,待绘制的输入图像(返回值);
text,待绘制的文字;
org,文字在图像中绘制区域的左下角位置;
fontFace,字体,由HersheyFonts定义,见4.1节;
fontScale,基于设定字体大小的缩放因子;
color,绘制文字的颜色;
thickness,绘制文字线的粗细;
lineType,线型,由LineTypes定义(见4.1节);
bottomLeftOrigin,该参数如果设为true,则图像数据原点位于左下角,否则位于左上角。
本案例给输入图像添加说明文字的代码如下:

import cv2

#图像读取
src = cv2.imread("src.jpg")
#绘制文字
text_content = "This is Lena"
draw_text = cv2.putText(src, text_content, (50, 50), cv2.FONT_ITALIC, 1, (0, 0, 255), thickness=2)
#图像显示
cv2.imshow("draw_text", draw_text)
cv2.waitKey(0)
cv2.destroyAllWindows()

案例中绘制的文字内容由text_content定义,文字的左下角坐标为(50, 50),字体为FONT_ITALIC,缩放因子为1,颜色为蓝色,绘制文字的线粗细为2个像素,文字绘制的结果如图4.8所示。
在这里插入图片描述
图4.8

猜你喜欢

转载自blog.csdn.net/lxiao428/article/details/122911518
今日推荐