目录
本篇介绍绘制图形和文字、图像的几何变换、图像的阈值处理和图像的运算。学习完这一部分内容后,读者不仅能够直观地看到运用 OpenCV 处理图像后的效果,还能够了解 OpenCV 程序的编码步骤和注意事项。
OpenCV 提供了许多绘制图形的方法,包括绘制线段的 line()方法、绘制矩形的 rectangle()方法、绘制圆形的 circle()方法、绘制多边形的 polylines()方法和绘制文字的 putText()方法。本章将依次对上述各个方法进行讲解,并使用上述方法绘制相应的图形。

img = cv2.line(img, pt1, pt2, color, thickness)

注意
线条颜色是 RGB 格式的,例如红色的 RGB 值是(255, 0, 0)。但是在 OpenCV 中,RGB 图像的通道顺序被转换成 B→G→R,因此(0, 0, 255)代表的是红色。
绘制线段并拼成一个「王」字。
- import numpy as np # 导入 Python 中的 numpy 模块
- import cv2
-
- # np.zeros():创建了一个画布
- # (300, 300, 3):一个 300 x 300,具有 3 个颜色空间(即 Red、Green 和 Blue)的画布
- # np.uint8:OpenCV 中的灰度图像和 RGB 图像都是以 uint8 存储的,因此这里的类型也是 uint8
- canvas = np.zeros((300, 300, 3), np.uint8)
- # 在画布上,绘制一条起点坐标为(50, 50)、终点坐标为(250, 50)、蓝色的、线条宽度为 5 的线段
- canvas = cv2.line(canvas, (50, 50), (250, 50), (255, 0, 0), 5)
- # 在画布上,绘制一条起点坐标为(50, 150)、终点坐标为(250, 150)、绿色的、线条宽度为 10 的线段
- canvas = cv2.line(canvas, (50, 150), (250, 150), (0, 255, 0), 10)
- # 在画布上,绘制一条起点坐标为(50, 250)、终点坐标为(250, 250)、红色的、线条宽度为 15 的线段
- canvas = cv2.line(canvas, (50, 250), (250, 250), (0, 0, 255), 15)
- # 在画布上,绘制一条起点坐标为(150, 50)、终点坐标为(150, 250)、黄色的、线条宽度为 20 的线段
- canvas = cv2.line(canvas, (150, 50), (150, 250), (0, 255, 255), 20)
- cv2.imshow(「Lines」, canvas) # 显示画布
- cv2.waitKey()
- cv2.destroyAllWindows()

OpenCV 提供了用于绘制矩形的 rectangle()方法,使用这个方法既可以绘制矩形边框,也可以绘制实心矩形。rectangle()方法的语法格式如下:
img = cv2.rectangle(img, pt1, pt2, color, thickness)

OpenCV 提供了用于绘制圆形的 circle()方法,这个方法与 rectangle()方法的功能相同,既可以绘制圆形边框,也可以绘制实心圆形。circle()方法的语法格式如下:
img = cv2.circle(img, center, radius, color, thickness)
openCV 提供了绘制多边形的 polylines()方法,使用这个方法绘制的多边形既可以是闭合的,也可以是不闭合的。polylines()方法的语法格式如下:
img = cv2.polylines(img, pts, isClosed, color, thickness)

OpenCV 提供了用于绘制文字的 putText()方法,使用这个方法不仅能够设置字体的样式、大小和颜色,而且能够使字体呈现斜体的效果,还能够控制文字的方向,进而使文字呈现垂直镜像的效果。putText()方法的语法格式如下:
img = cv2.putText(img, text, org, fontFace, fontScale, color, thickness, lineTy



说明
使用 putText()方法时,thickness、lineType 和 bottomLeftOrigin 是可选参数,有无均可。
注意 绘制文本只能写英文不能写中文 不然会乱码
在 putText()方法的语法格式中,有一个控制绘制文字时的方向的参数,即 bottomLeftOrigin,其默认值为 False。当 bottomLeftOrigin 为 True 时,文字将呈现垂直镜像效果。

- import cv2
- import time
- import numpy as np
-
- width,height=800,800
- r=20
- x=r+10
- y=r+100
- x_offer=y_offer=10
- while cv2.waitKey(1)==-1:
- if x>width-r or x
- x_offer*=-1
- if y>height-r or y
- y_offer*=-1
- x+=x_offer
- y+=y_offer
- img=np.ones((width,height,3),np.uint8)*255
- cv2.circle(img,(x,y),r,(255,0,0),-1)
- cv2.imshow('img',img)
- time.sleep(1/120)
- cv2.destroyAllWindows()
图像的几何变换
几何变换是指改变图像的几何结构,例如大小、角度和形状等,让图像呈现出缩放、翻转、映射和透视效果。这些几何变换操作都涉及复杂、精密的计算,OpenCV 将这些计算过程封装成非常灵活的方法,开发者只需修改一些参数,就能实现图像的变换效果。本章将介绍几种常见的几何变换效果及其实现方法。

缩放
dst = cv2.resize(src, dsize, fx, fy, interpolation)

dsize 参数实现缩放
dsize 参数的格式是一个元组,例如(100, 200),表示将图像按照宽 100 像素、高 200 像素的大小进行缩放。如果使用 dsize 参数,就可以不写 fx 和 fy 参数。

fx 和 fy 参数实现缩放
使用 fx 参数和 fy 参数控制缩放时,dsize 参数值必须使用 None,否则 fx 和 fy 失效。
fx 参数和 fy 参数可以使用浮点值,小于 1 的值表示缩小,大于 1 的值表示放大。其计算公式为:

翻转

OpenCV 通过 cv2.flip()方法实现翻转效果,其语法如下
dst = cv2.flip(src, flipCode)


-
相关阅读:
消息积压了如何处理?
jQuery过滤器:筛选jquery对象数组中的DOM对象
[笔记] 线性筛质数(素数)
HCIA数据通信——路由协议
C#.Net筑基-基础知识
(数据结构)算法的时间复杂度
计算机毕业设计ssm+vue基本微信小程序的电影票务系统-电影票预订系统
8.JWT认证
Android MediaRecorder录音
Elasticsearch深入理解(十) ——keyword与text的区别
-
原文地址:https://blog.csdn.net/qq_62218542/article/details/126930389