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()

输出结果如下:

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

相关推荐
吱吱企业安全通讯软件11 分钟前
吱吱企业通讯软件保证内部通讯安全,搭建数字安全体系
大数据·网络·人工智能·安全·信息与通信·吱吱办公通讯
盲盒Q31 分钟前
《频率之光:共振之战》
人工智能·硬件架构·量子计算
飞哥数智坊31 分钟前
DeepSeek V3.1 发布:我们等的 R2 去哪了?
人工智能·deepseek
爱分享的飘哥43 分钟前
第八十三章:实战篇:文 → 图:Prompt 控制图像生成系统构建——从“咒语”到“神作”的炼成!
人工智能·计算机视觉·prompt·文生图·stablediffusion·diffusers·text-to-image
ciku1 小时前
Spring Ai Advisors
人工智能·spring·microsoft
努力还债的学术吗喽1 小时前
【速通】深度学习模型调试系统化方法论:从问题定位到性能优化
人工智能·深度学习·学习·调试·模型·方法论
云边云科技1 小时前
零售行业新店网络零接触部署场景下,如何选择SDWAN
运维·服务器·网络·人工智能·安全·边缘计算·零售
audyxiao0012 小时前
为了更强大的空间智能,如何将2D图像转换成完整、具有真实尺度和外观的3D场景?
人工智能·计算机视觉·3d·iccv·空间智能
Monkey的自我迭代2 小时前
机器学习总复习
人工智能·机器学习
大千AI助手2 小时前
GitHub Copilot:AI编程助手的架构演进与真实世界影响
人工智能·深度学习·大模型·github·copilot·ai编程·codex