第三方库之库的实用指南

时间更新了, 是二零二四年九月十三日, 十点五十五分零秒, 作者是墨辰JC。

(Open)身为一个颇具强大力量的计算机视觉方面的库, 它给予了丰富多样的有关图像处理以及计算机视觉的功能, 在本文当中, 将会引领读者借助编程语言, 经由简单的代码示例, 初步得以掌握那图像处理的技术, 有需求的朋友们能去参考一下。

前言

(Open)身为一个具备强大能力的计算机视觉类型的库, 它给出来很丰富的用于图像处理以及计算机视觉方面的功能, 特别是在图像识别、对象检测、视频分析这样的领域当中有着范围广泛的应用。这篇文章将会引领读者借助编程语言, 经由简单一些的代码示例, 初步去掌握那图像处理的技术。

安装

首先,我们需要在环境中安装库,可以通过以下命令进行安装:

pip install opencv-python

完成安装之后, 我们能够导入库, 接着加载一张图像, 以此来开启我们的操作。

读取图像

图像读取构成了图像处理起始的首个步骤, 借助cv2.()这种方式能够较为轻易地予以达成。代码情况如下:

import cv2
# 读取图像
image = cv2.imread('path_to_image.jpg')
# 显示图像
cv2.imshow('Image', image)
cv2.waitKey(0)  # 按任意键关闭窗口
cv2.destroyAllWindows()

在这段代码中:

图像基本操作

随后, 能够针对读取得来的图像开展一些基础的操作, 像是获取图像的信息, 进行裁剪这一行为, 以及实施缩放这般的举动。

获取图像信息

# 获取图像的高度、宽度及通道数
height, width, channels = image.shape
print(f"Height: {height}, Width: {width}, Channels: {channels}")

裁剪图像

# 裁剪图像
cropped_image = image[50:200, 100:300]  # 裁剪区域为y轴从50到200,x轴从100到300
cv2.imshow('Cropped Image', cropped_image)
cv2.waitKey(0)
cv2.destroyAllWindows()

图像缩放

# 缩放图像
resized_image = cv2.resize(image, (300, 200))  # 将图像缩放至300x200
cv2.imshow('Resized Image', resized_image)
cv2.waitKey(0)
cv2.destroyAllWindows()

图像转换为灰度图

opencv in python_OpenCV Python安装与使用指南_Python OpenCV图像处理教程

有时候, 我们仅仅只需处理图像的灰度那个部分, 能够借助cv2.()函数来把彩色的图像转变为灰度图:

# 转换为灰度图
gray_image = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)
cv2.imshow('Gray Image', gray_image)
cv2.waitKey(0)
cv2.destroyAllWindows()

以下是 cv2.* 常见的颜色空间转换类型及其解释:

cv2.把彩像从BGR模式转成灰度图像。cv2.将图像从BGR模式转成RGB模式。(默认用BGR排列, 而好多其他库像啥啥啥用RGB排列, 所以得把BGR转为RGB)cv2.把图像从BGR模式转成HSV模式。(HSV模式分别指色调(Hue)、饱和度(啥啥啥)、亮度(Value), 此模式更贴近人类对颜色的感知, 常被用于色彩过滤和图像分割呐)cv2用途: 把图像从BGR模式转成LAB模式, LAB颜色空间含亮度即L、绿色到红色即A、蓝色到黄色即B, 此模式常被用于增强图像对比度。

更多不在说明,可查询官方文档

图像模糊处理

频繁被应用于图像预处理范畴的模糊处理, 给出了好些各种不同的模糊算法, 像是高斯模糊、又或者中值模糊这类的。下面呈现的是运用高斯模糊的代码示例:

# 高斯模糊处理
blurred_image = cv2.GaussianBlur(image, (15, 15), 0)  # 核大小为15x15
cv2.imshow('Blurred Image', blurred_image)
cv2.waitKey(0)
cv2.destroyAllWindows()

边缘检测

Canny边缘检测属于一种常见的图像处理技术, 其作用是找出图像里的“边缘”, 换句话说, 就是物体之间的轮廓或者变化最为明显的部分。此项技术被广泛运用在图像识别、对象检测等领域。代码如下:

# 边缘检测
edges = cv2.Canny(image, 100, 200)
cv2.imshow('Edges', edges)
cv2.waitKey(0)
cv2.destroyAllWindows()

这段代码之中, cv2.Canny() 的那两个参数, 其一是低阈值, 另一是高阈值, 这些参数进行边缘检测敏感度的控制。

cv2.Canny(image, 100, 200), 其作用为凭借Canny进行边缘检测, 当中的100属于低阈值, 200是高阈值, 而这二者决定了检测所具备的灵敏度。

图像翻转

图像作那种沿水平或者垂直方向予以翻转的操作就叫图像翻转, 其中常见的存在着水平翻转以及垂直翻转这两种情形;在特定环境里, 能够运用cv2.flip()函数达成图像翻转这件事。

dst = cv2.flip(src, flipCode)

opencv in python_OpenCV Python安装与使用指南_Python OpenCV图像处理教程

那第一个参数所呈现的意义是用以明示进行翻转操作的那个输入图像, 进而第二个参数所指向的含义为对翻转类别进行界定, 它能够选取以下这些数值:

图像保存

图像处理完毕之后, 我们能够借助cv2.()把图像存储至磁盘之上, 下述这些便是保存图像的代码。

# 保存图像
cv2.imwrite('output_image.jpg', gray_image)

视频相关操作

不但能够处理静态图像, 而且还可以处理视频数据。不管是从摄像头实时获取视频, 还是读取视频文件, 都能够轻松予以完成。

方法讲解cv2.(), ()是用于捕获视频流的类, 不管是源于文件、摄像头, 又或者是网络摄像头, 均会使用到它, 它把视频源当作参数来接受, 参数能够是摄像头的索引, 像本地摄像头索引为0, 也能够是视频文件的路径, 还能够是网络摄像头的URL地址。.(), 用于查验视频源是不是成功打开, 其返回一个布尔值, True意味着视频源成功打开, False表示打开失败。.read(), 从视频流里读取一帧图像。有两个返回值, 其中一个是ret, 它用于表示是否成功读取到帧, 当成功进行读取时为True, 而失败之时则为False。还有一个返回值是frame, 它是读取到的当前帧, 一般来讲是一个numpy数组, 其作用是表示图像数据。这样的一个方法是视频处理中最为核心的循环部分, 每一次进行调用的时候, 它都会返回下一帧的视频图像。要是ret的值为False, 一般情况下这指示着视频流已然结束或者读取出错。cv2.()可把用在在窗口里显示图像或者视频帧了。有两个参数, 一个是窗口名, 另一个是要显示的图像或视频帧, 它是属于包含图像数据的 numpy 数组, 进行读取视频。

起先, 我们得清楚怎样去读取视频文件, 它给出了cv2.()方法, 用来打开视频文件或者摄像头。

import cv2
# 打开视频文件
video_capture = cv2.VideoCapture('path_to_video.mp4')
# 检查视频是否成功打开
if not video_capture.isOpened():
    print("无法打开视频文件")
    exit()
# 循环读取视频帧
while True:
    ret, frame = video_capture.read()
    
    # 如果读取成功
    if ret:
        # 显示当前帧
        cv2.imshow('Video', frame)
        
        # 等待键盘输入,如果按下'q'键,退出循环
        if cv2.waitKey(25) & 0xFF == ord('q'):
            break
    else:
        break
# 释放视频资源
video_capture.release()
cv2.destroyAllWindows()

从摄像头读取视频

把视频文件摒弃掉不读取不算完, 还能够直接经由电脑的摄像头去将视频流给弄到手。cv2.(0) 所代表的情形是开启默认的用作摄像的“头”。

import cv2
# 打开摄像头
video_capture = cv2.VideoCapture(0)
# 检查摄像头是否成功打开
if not video_capture.isOpened():
    print("无法打开摄像头")
    exit()
# 循环读取视频帧
while True:
    ret, frame = video_capture.read()
    
    # 如果读取成功
    if ret:
        # 显示当前帧
        cv2.imshow('Webcam Video', frame)
        
        # 按下'q'键退出
        if cv2.waitKey(1) & 0xFF == ord('q'):
            break
    else:
        break
# 释放摄像头资源
video_capture.release()
cv2.destroyAllWindows()

要留意, 还能够借助网络摄像头的访问地址, 一般而言是 HTTP 或 RTSP 协议。凭借, IP 地址以及端口能够访问视频流、有时, 摄像头需求认证, 也就是用户名以及密码, 能够把它嵌入至 URL 之中。比如:

rtsp://username:password@your_camera_ip:port/stream

到这儿, 这一篇针对第三方库之库的实用指南的文章就讲完了, 更多有关库使用的内容, 去我主页搜以前的文章, 或者继续浏览下面相关的文章, 期望大家往后多多支持我,谢谢!

Logo

Agent 垂直技术社区,欢迎活跃、内容共建。

更多推荐