OpenCV库打开图片或视频

OpenCV库介绍

OpenCV(Open Source Computer Vision Library)是一个用于计算机视觉和图像处理的开源库。它由英特尔开发并面向各种平台,包括Windows、Linux和macOS。OpenCV提供了丰富的函数和工具,可以用于处理图像和视频、特征检测、目标识别、机器学习等多个领域。

以下是OpenCV库的一些主要功能和特点:

图像和视频处理:OpenCV支持处理各种图像和视频格式的功能,包括读取、写入、显示、裁剪、缩放、旋转、滤波、边缘检测、色彩空间转换等。

特征检测和描述:OpenCV提供了各种特征检测和描述算法,如Harris角点检测、SIFT、SURF和ORB特征描述等。这些算法可以用于对图像中的重要特征进行提取和匹配。

目标检测和跟踪:OpenCV提供了一些常用的目标检测和跟踪算法,如Haar特征检测器、HOG+SVM和卷积神经网络等。这些算法可以用于定位和识别图像中的目标对象。

机器学习:OpenCV集成了一些常用的机器学习算法,如K均值聚类、支持向量机、决策树和随机森林等。这些算法可以用于图像分类、目标识别、人脸识别等任务。

视觉分析和计算机视觉应用:OpenCV还提供了一些高级的视觉分析和计算机视觉应用功能,如光流分析、立体视觉、结构光三维重建和人机交互等。

总之,OpenCV是一个功能强大且广泛应用于计算机视觉和图像处理领域的开源库,它提供了丰富的功能和工具,方便开发人员进行图像和视频处理、特征提取、目标检测和跟踪、机器学习等任务。

安装OpenCV库

要使用OpenCV库,你必须确保你已经安装OpenCV库。如果你还没用安装可以使用以下命令安装:

pip install opencv-python

如果你是在anaconda中安装的话,可以打开anaconda的虚拟环境终端,使用下面的命令安装:

conda install opencv

opencv打开和保存图片

你可以使用OpenCV库来打开和保存图片。

导入OpenCV库:

import cv2

打开图像文件:

image = cv2.imread('image.jpg')

这将会读取名为'image.jpg'的图像文件,然后将其存储在变量'image'中。请确保图像文件位于当前工作目录中。

在处理图像之前,最好先检查图像是否成功加载:

if image is not None:
    # 在这里进行图像处理
    pass
else:
    print("无法加载图像文件")

在进行图像处理后,你可以将图像保存到文件中:

cv2.imwrite('output_image.jpg', image)

这将会把处理过的图像保存为名为'output_image.jpg'的文件。

请注意,OpenCV支持很多图像格式,例如JPEG、PNG、BMP等。你可以根据需求使用不同的格式进行图像的保存和加载。例如,要保存为PNG格式的图像,你可以使用以下代码:

cv2.imwrite('output_image.png', image)

下面的一段代码,使用OpenCV打开一个窗口,加载一张图片,按q键退出,按s键保存图片为新名字的图片。

import cv2

cv2.namedWindow('img',cv2.WINDOW_NORMAL)
cv2.resizeWindow('img',800,600)

img = cv2.imread('cat.jpeg')

while img is not None:
    cv2.imshow('img',img)
    key = cv2.waitKey(0)
    if key == ord('q'):
        break
    elif key == ord('s'):
        cv2.imwrite('other.png',img)
else:
    print("无法加载图像文件")

cv2.destroyAllWindows()

OpenCV打开和保存视频

要使用OpenCV打开和保存视频,你可以按照以下步骤进行操作:

导入OpenCV库:

import cv2

打开视频文件:

video = cv2.VideoCapture('video.mp4')

这将会打开名为'video.mp4'的视频文件,并将其存储在变量'video'中。请确保视频文件位于当前工作目录中。

在处理视频之前,你可以先查看视频的一些基本信息:

fps = video.get(cv2.CAP_PROP_FPS)  # 获取帧率
width = int(video.get(cv2.CAP_PROP_FRAME_WIDTH))  # 获取视频宽度
height = int(video.get(cv2.CAP_PROP_FRAME_HEIGHT))  # 获取视频高度

print(f"帧率:{fps}")
print(f"宽度:{width}")
print(f"高度:{height}")

这将会打印出视频的帧率、宽度和高度信息。

通过循环逐帧读取视频:

while True:
    ret, frame = video.read()

    if ret:
        # 在这里进行每一帧的处理
        pass
    else:
        break

    # 在这里显示处理后的每一帧图像
    cv2.imshow('Frame', frame)

    # 按下 'q' 键退出循环
    if cv2.waitKey(1) & 0xFF == ord('q'):
        break

在循环中,使用video.read()函数读取每一帧,并将结果存储在变量frame中。如果读取成功,ret的值将为True,否则为False。你可以在每一帧中进行图像处理操作。

保存处理后的视频至文件:

output = cv2.VideoWriter('output_video.mp4', cv2.VideoWriter_fourcc(*'mp4v'), fps, (width, height))

while True:
    ret, frame = video.read()

    if ret:
        # 在这里进行每一帧的处理
        pass
    else:
        break

    # 在这里将处理后的每一帧写入输出视频
    output.write(frame)

output.release()

在循环中,你可以进行每一帧的图像处理操作。然后,使用output.write(frame)将处理后的每一帧写入输出视频中。

注意要释放输出对象output并关闭视频窗口:

output.release()
cv2.destroyAllWindows()

下面的代码展示的是视频的打开和保存,同样盒上面一样,都是q退出,s保存。

import cv2

cv2.namedWindow('video',cv2.WINDOW_NORMAL)
cv2.resizeWindow('video',1280,720)

video = cv2.VideoCapture('296.mp4')
out_video = cv2.VideoWriter('output_video.mp4',cv2.VideoWriter_fourcc(*'mp4v'),video.get(cv2.CAP_PROP_FPS),
                            (int(video.get(cv2.CAP_PROP_FRAME_WIDTH)),int(video.get(cv2.CAP_PROP_FRAME_HEIGHT))))

while video.isOpened():
    ret,frame = video.read()
    if not ret:
        break
    cv2.imshow('video',frame)

    key = cv2.waitKey(10)

    if key == ord('q'):
        break
    elif key == ord('s'):
        out_video.write(frame)

else:
    print("加载视频文件失败")
video.release()
cv2.destroyAllWindows()