前言

在计算机视觉领域,OpenCV 是一个不可或缺的工具。它提供了丰富的功能,用于图像处理、视频分析、特征检测等。本文将通过实际代码示例,介绍 OpenCV 的基本功能,包括图像的读取、显示、保存,绘制几何图形,以及视频处理等。这些示例将帮助初学者快速上手 OpenCV。

一、OpenCV 简介

OpenCV(Open Source Computer Vision Library)是一个开源的计算机视觉和机器学习软件库。它由 Intel 公司的俄罗斯团队发起并维护,支持多种编程语言,如 C++、Python、Ruby 等,并且可以在 Windows、Linux、OS X、Android 和 iOS 等多个平台上运行。OpenCV-Python 是 OpenCV 的 Python API,结合了 OpenCV C++ API 和 Python 语言的最佳特性,使得开发更加便捷。

二、安装 OpenCV-Python

在 Python 中使用 OpenCV 非常简单。首先,需要安装 OpenCV-Python 库。可以通过以下命令进行安装:

pip install -i https://pypi.tuna.tsinghua.edu.cn/simple opencv-python

三、 图像的基本操作

3.1 读取图像

使用 cv2.imread 函数可以读取图像文件。该函数的第一个参数是图像的路径,第二个参数是读取模式(默认为彩色模式)。

import cv2
img = cv2.imread('../src/1.jpg')

3.2 显示图像

使用 cv2.imshow 函数可以显示图像。需要指定窗口名称和要显示的图像。

cv2.imshow("window1", img)
cv2.waitKey(0)  # 等待用户按键

3.3 保存图像

使用 cv2.imwrite 函数可以保存图像。需要指定保存的文件名和要保存的图像。

cv2.imwrite("./src/1_new.jpg", img)

四、绘制几何图形

4.1 绘制直线

使用 cv2.line 函数可以在图像上绘制直线。需要指定图像、起点、终点、颜色和线条宽度。

cv2.line(img, (50, 50), (50, 400), (255, 0, 0), 2)
cv2.line(img, (50, 50), (400, 50), (255, 0, 0), 2)
cv2.imshow("window1", img)
cv2.waitKey(0)

4.2 绘制圆形

使用 cv2.circle 函数可以在图像上绘制圆形。需要指定图像、圆心、半径、颜色和线条宽度。

cv2.circle(img, (300, 300), 100, (0, 0, 255), 2)
cv2.imshow("window1", img)
cv2.waitKey(0)

4.3 绘制矩形

使用 cv2.rectangle 函数可以在图像上绘制矩形。需要指定图像、左上角和右下角坐标、颜色和线条宽度。

cv2.rectangle(img, (50, 50), (300, 300), (0, 0, 255), 2)
cv2.imshow("window1", img)
cv2.waitKey(0)

4.4 向图像中添加文字

使用 cv2.putText 函数可以在图像上添加文字。需要指定图像、文字内容、位置、字体、字体大小、颜色和线条宽度。

cv2.putText(img,"Hello",(100,100),cv2.FONT_HERSHEY_COMPLEX,1,(127,127,127),2,cv2.LINE_AA)
cv2.imshow("window1",img)
cv2.waitKey(0)

如果要添加中文,则要使用PIL库,cv2库无法使用cv2.putText渲染中文。

import cv2
from PIL import Image, ImageDraw, ImageFont

img = cv2.imread('../src/1.jpg')
img_pil = Image.fromarray(cv2.cvtColor(img, cv2.COLOR_BGR2RGB))
draw = ImageDraw.Draw(img_pil)
font_path = "simsun.ttc"  # 例如宋体字体文件
font = ImageFont.truetype(font_path, 40)
text = "你好"
draw.text((50, 50), text, font=font, fill=(255, 0, 0))
img = cv2.cvtColor(np.array(img_pil), cv2.COLOR_RGB2BGR)
cv2.imshow("window1", img)
cv2.waitKey(0)

5. 视频处理

5.1 捕获视频

使用 cv2.VideoCapture 函数可以捕获视频流。可以指定视频文件路径或摄像头索引(0 表示默认摄像头)。

cap = cv2.VideoCapture('../src/1.mp4')

5.2 读取视频帧

使用 cap.read 方法可以读取视频帧。返回值 ret 表示是否成功读取到帧,frame 是当前帧的图像数据。

while True:
    ret, frame = cap.read()
    if not ret:
        break
    cv2.imshow("window1", frame)
    if cv2.waitKey(1) == ord("q"):
        break

5.3 保存视频

使用 cv2.VideoWriter 对象可以保存视频。需要指定输出文件名、编码格式、帧率和帧大小。

fps = int(cap.get(cv2.CAP_PROP_FPS))
width = int(cap.get(cv2.CAP_PROP_FRAME_WIDTH))
height = int(cap.get(cv2.CAP_PROP_FRAME_HEIGHT))
fourcc = cv2.VideoWriter_fourcc(*'mp4v')
out = cv2.VideoWriter("output.mp4", fourcc, fps, (width, height))

while True:
    ret, frame = cap.read()
    if not ret:
        break
    cv2.imshow("window1", frame)
    out.write(frame)
    if cv2.waitKey(1) == ord("q"):
        break

cap.release()
out.release()
cv2.destroyAllWindows()

6. 窗口操作

使用 cv2.namedWindow 函数可以创建窗口。可以指定窗口名称和窗口类型(如 cv2.WINDOW_NORMAL 或 cv2.WINDOW_AUTOSIZE)。

cv2.namedWindow("window1", cv2.WINDOW_AUTOSIZE)
cv2.resizeWindow("window1", 900, 500)
cv2.moveWindow("window1", 500, 100)
img1 = cv2.imread('../src/1.jpg')
cv2.imshow("window1", img1)
cv2.waitKey(1000)
img2 = cv2.imread('../src/2.jpg')
cv2.imshow("window1", img2)
cv2.waitKey(0)

总结

本文通过实际代码示例,介绍了 OpenCV 的基本功能,包括图像的读取、显示、保存,绘制几何图形,以及视频处理等。这些功能为计算机视觉的应用提供了强大的支持。希望本文能帮助初学者快速上手 OpenCV,开启计算机视觉的学习之旅。

Logo

技术共进,成长同行——讯飞AI开发者社区

更多推荐