OpenCV-12绘制图像

OpenCV提供了许多绘制图像的API,可以在图像上绘制各种图形,例如直线,矩形,圆,椭圆等图形。

一、画直线

利用API line(img, pt1, pt2, color, thickness, lineType, shift)可以绘制直线。

其中img:表示在哪个图像上画直线

pt1,pt2:开始点和结束点,用于指定线的开始和结束位置。(按照坐标点的形式写入,用元组的格式,先列后行)

color:指定直线的颜色。(颜色的形式也为BGR的元组形式)

thickness:指定线宽。(数值越大,线条越粗)

lineType:指定线性,线性为0, 4, 8, 16,默认为8。(只有实线一种类型,数字越大,线越光滑)

shift:坐标缩放比例。(一般可以不用写)

示例代码如下:

复制代码
import cv2
import numpy as np


img = np.zeros((480, 640, 3), np.uint8)   # 创建一个全黑的背景图

cv2.line(img, (10, 20), (300, 400), (0, 0, 255), 5, 4)   # 画红色的线
cv2.line(img, (80, 100), (380, 480), (0, 0, 255), 5, 16)

cv2.imshow("line", img)
cv2.waitKey(0)
cv2.destroyAllWindows()

输出结果如下:

二、画矩形

画矩形的API中的参数与画直线的API一样,比较简单。

示例代码如下:

复制代码
import cv2
import numpy as np


img = np.zeros((480, 640, 3), np.uint8)   # 创建一个全黑的背景图

cv2.rectangle(img, (20, 50), (380, 380), (0, 255, 0), 5, 16)   # 用绿色画框


cv2.imshow("line", img)
cv2.waitKey(0)
cv2.destroyAllWindows()

输出结果如下:

三、画圆

画圆我们使用以下API:circle(img, center, radius, color, thickness, lineType, shift)

相比较于画直线与矩形,将起始点和终点改为中心点和半径,其他参数相同。

示例代码如下:

复制代码
import cv2
import numpy as np


img = np.zeros((480, 640, 3), np.uint8)   # 创建一个全黑的背景图

# Opencv读取的行和列与numpy相反
cv2.circle(img, (320, 240), 50, (255, 0, 0), 5, 16)   # 在中心点用蓝色画圆

cv2.imshow("line", img)
cv2.waitKey(0)
cv2.destroyAllWindows()

输出结果如下:

四、绘制椭圆

使用API cv.ellipse(img, center, axes, angle, startAngel, endAngle, color, thickness, lineType, shift)

其中img, center, color, thickness, lineType, shift与上述参数要求一样。

Opencv画椭圆,相当于将椭圆锁在一个矩形里面,沿着切线画。

axes为axis的复数,需要填写椭圆x轴与y轴长度的一半。

angle:椭圆可以任意旋转角度,可以是横着的也可以是竖着的。(默认是0°,且逆时针旋转)

startAngle:从哪个角度开始

endAngle:从哪个角度结束°

开始角度和结束角度可以设置画取椭圆的一部分,而不是整个椭圆。从0°~360°则为一个完整的椭圆。

当把axes的两个数值改为相等,则相当于画圆形。

示例代码如下:

复制代码
import cv2
import numpy as np


img = np.zeros((480, 640, 3), np.uint8)   # 创建一个全黑的背景图
img2 = np.zeros((480, 640, 3), np.uint8)   
img3 = np.zeros((480, 640, 3), np.uint8)   


cv2.ellipse(img, (320, 240), (80, 40), 0, 0, 360, (0, 255, 0), 5, 16)
cv2.ellipse(img2, (320, 240), (80, 40), 90, 0, 360, (0, 255, 0), 5, 16)
cv2.ellipse(img3, (320, 240), (80, 40), 0, 0, 180, (0, 255, 0), 5, 16)
# Opencv读取的行和列与numpy相反


cv2.imshow("line", img)
cv2.imshow("line2", img2)
cv2.imshow("line3", img3)
cv2.waitKey(0)
cv2.destroyAllWindows()

输出结果如下:

通过改变不同的角度值可以获取不同的椭圆类型。

相关推荐
风象南4 小时前
我把大脑开源给了AI
人工智能·后端
Johny_Zhao6 小时前
OpenClaw安装部署教程
linux·人工智能·ai·云计算·系统运维·openclaw
飞哥数智坊7 小时前
我帮你读《一人公司(OPC)发展研究》
人工智能
冬奇Lab10 小时前
OpenClaw 源码精读(3):Agent 执行引擎——AI 如何「思考」并与真实世界交互?
人工智能·aigc
没事勤琢磨12 小时前
如何让 OpenClaw 控制使用浏览器:让 AI 像真人一样操控你的浏览器
人工智能
用户51914958484512 小时前
CrushFTP 认证绕过漏洞利用工具 (CVE-2024-4040)
人工智能·aigc
牛马摆渡人52812 小时前
OpenClaw实战--Day1: 本地化
人工智能
前端小豆12 小时前
玩转 OpenClaw:打造你的私有 AI 助手网关
人工智能
BugShare12 小时前
写一个你自己的Agent Skills
人工智能·程序员
机器之心13 小时前
英伟达护城河被AI攻破,字节清华CUDA Agent,让人人能搓CUDA内核
人工智能·openai