返回

图像处理利器OpenCV绘制图形详解

人工智能

OpenCV 绘图:解锁计算机视觉中图形的无限可能

OpenCV 的力量

OpenCV(计算机视觉开放库)在计算机视觉领域是一个家喻户晓的名字,以其强大的图像处理和分析能力而闻名。然而,您可能不知道,OpenCV 还拥有广泛的绘图功能,可以为您的项目增添生动和信息丰富的可视化效果。

绘图基础

使用 OpenCV 进行绘图就像在画布上作画一样。从绘制线条和矩形等基本形状到显示图像和增强现实应用,OpenCV 应有尽有。

线条

line() 函数允许您绘制一条直线,而 arrowedLine() 函数则绘制带箭头的直线,用于突出显示方向或路径。

import cv2

# 创建空白图像
img = np.zeros((512, 512, 3), np.uint8)

# 绘制线条
cv2.line(img, (0, 0), (255, 255), (0, 255, 0), 2)

# 绘制带箭头的线
cv2.arrowedLine(img, (255, 0), (0, 255), (0, 0, 255), 2)

# 显示图像
cv2.imshow("线条", img)
cv2.waitKey(0)
cv2.destroyAllWindows()

矩形

rectangle() 函数绘制矩形边框,而 filledRectangle() 函数绘制填充矩形,用于创建区域或突出显示对象。

import cv2

# 创建空白图像
img = np.zeros((512, 512, 3), np.uint8)

# 绘制矩形
cv2.rectangle(img, (0, 0), (255, 255), (0, 255, 0), 2)

# 绘制填充矩形
cv2.filledRectangle(img, (255, 0), (0, 255), (0, 0, 255))

# 显示图像
cv2.imshow("矩形", img)
cv2.waitKey(0)
cv2.destroyAllWindows()

圆形

circle() 函数可用于绘制圆形,而 ellipse() 函数可用于绘制椭圆,非常适合表示物体或焦点区域。

import cv2

# 创建空白图像
img = np.zeros((512, 512, 3), np.uint8)

# 绘制圆
cv2.circle(img, (127, 127), 100, (0, 255, 0), 2)

# 绘制椭圆
cv2.ellipse(img, (255, 127), (100, 50), 0, 0, 360, (0, 0, 255), 2)

# 显示图像
cv2.imshow("圆形和椭圆", img)
cv2.waitKey(0)
cv2.destroyAllWindows()

多边形

polylines() 函数绘制折线,而 fillPoly() 函数绘制填充多边形,用于创建自定义形状或连接点。

import cv2

# 创建空白图像
img = np.zeros((512, 512, 3), np.uint8)

# 绘制折线
pts = np.array([[10, 50], [200, 200], [300, 100]], np.int32)
pts = pts.reshape((-1, 1, 2))
cv2.polylines(img, [pts], False, (0, 255, 0), 2)

# 绘制填充多边形
pts2 = np.array([[400, 100], [500, 200], [400, 300]], np.int32)
pts2 = pts2.reshape((-1, 1, 2))
cv2.fillPoly(img, [pts2], (0, 0, 255))

# 显示图像
cv2.imshow("多边形", img)
cv2.waitKey(0)
cv2.destroyAllWindows()

文字

putText() 函数允许您将文本添加到图像中,非常适合添加注释、标签或指示。

import cv2

# 创建空白图像
img = np.zeros((512, 512, 3), np.uint8)

# 添加文本
cv2.putText(img, "OpenCV 绘图", (10, 50), cv2.FONT_HERSHEY_SIMPLEX, 1, (0, 255, 0), 2)

# 显示图像
cv2.imshow("文本", img)
cv2.waitKey(0)
cv2.destroyAllWindows()

图像

imshow() 函数显示图像,而 imwrite() 函数将其保存到磁盘,非常适合交互式可视化或持久化结果。

import cv2

# 加载图像
img = cv2.imread("image.jpg")

# 显示图像
cv2.imshow("图像", img)
cv2.waitKey(0)

# 保存图像
cv2.imwrite("output.jpg", img)

增强现实

OpenCV 还支持增强现实 (AR),这是一个将数字信息叠加到真实世界场景上的过程。

aruco 库

aruco 库提供了一种检测和识别 AprilTags(一种视觉标记)的方法,从而可以创建交互式 AR 应用程序。

aruco-opencv 库

aruco-opencv 库提供了 OpenCV 接口,用于简化 aruco 库的使用,从而轻松构建 AR 应用程序。

常见问题解答

1. 绘制时如何控制线条宽度?
使用线条绘制函数时,您可以指定一个整数参数来控制线条的宽度。

2. 如何填充闭合形状?
要填充闭合形状,请使用 fill*() 函数,例如 fillPoly() 或 fillConvexPoly()。

3. 如何将多个图像合并到一个图像中?
您可以使用 OpenCV 的 addWeighted() 函数将图像混合在一起,或使用 hconcat()vconcat() 函数将图像水平或垂直排列。

4. 如何从图像中裁剪区域?
使用 OpenCV 的 roi 参数可以从图像中裁剪区域,该参数指定感兴趣的区域。

5. 如何将 OpenCV 与其他库(如 NumPy)一起使用?
OpenCV 与 NumPy 紧密集成,允许您使用 NumPy 数组作为图像数据。

结论

OpenCV 的绘图功能是一项强大的工具,可以为您的计算机视觉项目增添活力和信息量。从绘制线条和矩形到显示图像和增强现实应用,OpenCV 应有尽有。通过掌握这些基础知识,您可以创建引人入胜、有意义的可视化效果,提升您的应用程序。