AI入门:如何使用opencv读取图片和视频?

发布时间:2024-08-18 15:51:17 浏览量:242次

大部分的cv应用都需要处理图像输入和输出。比如,一个互动式cv应用可能通过摄像头作为输入源,并在窗口中显示输出。除了摄像头输入外,还可能涉及到图像文件、视频文件和原始字节的读取。举例来说,网络传输中的原始字节可能是应用中图形处理算法生成的。

不管是什么格式,每个像素都有一个值,但表示像素的方法各不相同。例如,可以通过使用二维NumPy数组简单地创建一个黑色的正方形图像:

黑色正方形图像
  1. 图像读取

OpenCV的imread函数支持各种静态图像文件格式。

imread函数示例
不同flags下读取结果
#### 显示不同flags读取结果def cv2flags(filename):    flags = [0, 1, 2, 3, 4]    for flag in flags:        m = cv2.imread(filename, flags=flag)        cv2.namedWindow(f"flags={flag}", 0)        cv2.imshow(f"flags={flag}", m)    cv2.waitKey(0)filename = "./src/imgs/1.jpg"cv2flags(filename)

flags:图像的通道和色彩信息(默认值为1),即彩色图片。8位深度图片存储像素点的取值范围为0~255,1通道为灰度图,3通道为彩色图。

基本上,一个字节可以表示0到255的整数。对于实时图像应用来说,一个像素通常由每个通道的一个字节表示。

一个OpenCV图像是array类型的二维或三维数组。8位的灰度图像是一个含有字节值的二维数组。因此,我们可以通过坐标位置访问像素,比如修改横向600-800、纵向100-200为蓝色(BGR=(255,0,0)):

修改像素颜色示例

掌握了这些基础知识,我们就可以轻松读取图片或网络图片,方法十分简单:

### 核心点:获取图像字节数据def show_url_image(url_path):    resp = request.urlopen(url_path)    image = np.asarray(bytearray(resp.read()), dtype="uint8") ### 字节流数组    img = cv2.imdecode(image, 1)     cv2.namedWindow("show_url_image", 0)    cv2.imshow("show_url_image", img)    cv2.waitKey(0)
网络图片读取示例

视频读取:

OpenCV提供了VideoCapture类和Video Writer类来支持各种视频文件格式。在到达视频文件末尾之前,VideoCapture类通过read()函数获取新的帧,每帧是基于BGR格式的图像。

#### 视频读取def show_video(video_path):    cap = cv2.VideoCapture(video_path)    while (cap.isOpened()):        ret, frame = cap.read()        if ret == True:            frame1 = process(frame, opt=0) ###增加视频处理功能            met = np.hstack((frame, frame1))            cv2.namedWindow("show_video", 0)            cv2.imshow("show_video", met)            if cv2.waitKey(1) & 0xFF == ord('q'):                break        else:            break

waitKey()的参数为等待键盘触发的时间,单位为毫秒,其返回值是1(表示没有键被按下)或ASCII码,如27表示按下Esc键。另外,Python提供了一个标准函数ord(),该函数可以将字符转换为ASCII码。例如,输入ord('a)会返回97。

以上就是图片、视频读写的基本方法,是不是非常简单呢?

备注:免费获取源码,请评论区回复源码。

热门课程推荐

热门资讯

请绑定手机号

x

同学您好!

您已成功报名0元试学活动,老师会在第一时间与您取得联系,请保持电话畅通!
确定