图像处理利器OpenCV绘制图形详解
2024-02-23 19:22:45
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 应有尽有。通过掌握这些基础知识,您可以创建引人入胜、有意义的可视化效果,提升您的应用程序。