OpenCV - 1 图片读取、生成简单图像、视频读取

本文详细介绍了OpenCV库在Python中的使用,包括读取、显示和保存图像,生成图像,以及如何处理摄像头视频流。内容涵盖cv2.imread(), cv2.imshow(), cv2.waitKey(), cv2.imwrite()等函数的用法,还展示了如何转换颜色空间,实时显示摄像头画面,以及播放和录制视频。此外,解释了cv2.VideoCapture()及其相关方法,如cap.read()和cv2.cvtColor(),以及cv2.VideoWriter()用于视频输出的参数设置。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

 读取、显示、保存:

import cv2
a = cv2.imread('E:/picture/lena.jpg',0) #0为灰色,1为彩色,-1包含透明通道的彩色图
cv2.imshow('lena',a)  #此处必须有个命名,可以为空 eg:cv2.imshow('',a)
cv2.waitKey(0) #暂停多少毫秒,0表示一直暂停
cv2.imwrite('C:/Users/10611/Desktop/lena.jpg',a) #将a输出到桌面上

生成图像输出

import cv2
import numpy as np
width = 256
height = 256
img = np.zeros([width, height, 3], dtype=np.uint8)
for i in range(width):
    for j in range(height):
        for k in range(3):
            img[i,j,k]=i
cv2.imshow('A',img)
cv2.waitKey(0)

如果控制RGB三通道的值是一样的,输出出来的图像就是全黑的,因为同等的红绿蓝加起来是黑色。

打开摄像头:

实时显示摄像头

# 打开摄像头并灰度化显示
import cv2
capture = cv2.VideoCapture(0) 
while(True):
    ret, frame = capture.read()
    gray = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY)    # 将这帧转换为灰度图
    cv2.imshow('frame', gray)
    if cv2.waitKey(1) == ord('q'):
        break

整体理解为:通过read读取一帧,show来显示当前帧,waitKey(1)将确保在每毫秒的间隔后生成一个新帧,通过while来进行遍历。如果我们将waitkey里面的参数改成500,即500ms刷新一次,就会发现视频帧率变低了。

1、cv2.VideoCapture()函数:
cap = cv2.VideoCapture(0)
VideoCapture()中参数是0,表示打开笔记本的内置摄像头。
cap = cv2.VideoCapture("…/1.avi")
VideoCapture("…/1.avi"),表示参数是视频文件路径则打开视频。

2、cap.isOpened()函数:
返回true表示成功,false表示不成功

3、ret,frame = cap.read()函数:
cap.read()按帧读取视频,ret,frame是获cap.read()方法的两个返回值。其中ret是布尔值,如果读取帧是正确的则返回True,如果文件读取到结尾,它的返回值就为False。frame就是每一帧的图像,是个三维矩阵(即RGB)。
所以把代码改成这样就是彩色图像:

import cv2
capture = cv2.VideoCapture(0) 
while(True):
    ret, frame = capture.read()
    cv2.imshow('frame', frame)
    if cv2.waitKey(1) == ord('q'):
        break

4、cv2.cvtColor()用来转换颜色,这里将彩色图转成灰度图。

5、关于cv2.waitkey()的理解

播放本地视频

# 播放本地视频
capture = cv2.VideoCapture('demo_video.mp4')
while(capture.isOpened()):
    ret, frame = capture.read()
    gray = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY) #灰度显示
    cv2.imshow('frame', gray)
    if cv2.waitKey(30) == ord('q'):
        break

录制视频

import cv2
cap=cv2.VideoCapture(0)
fourcc=cv2.VideoWriter_fourcc(*'MJPG')
outfile=cv2.VideoWriter('output.avi',fourcc,25.,(640,480))

while(cap.isOpened()):
    ret,frame=cap.read()
    if ret: #如果成功捕获一帧
        outfile.write(frame) #输出这一帧
        cv2.imshow('frame',frame) #展示当前帧
        if cv2.waitKey(1)==ord('q'): #控制帧率和是否结束
            break
    else: #如果没有成功捕获则退出
        break

1、cv2.VideoWriter_fourcc():表示编码方式,有DIVX , XVID , MJPG , X264 , WMV1 , WMV2等等(XVID是最好的,MJPG是高尺寸视频,X264得到小尺寸视频)

2、cv2.VideoWriter():有四个参数:

        输出的文件名,如'output.avi'
        编码方式FourCC码(1里面定义的)
        帧率FPS
        要保存的分辨率大小

3、 outfile.write():通过此方法输出获取的当前帧

参考:

python中VideoCapture(),read(),waitKey()的使用_hanshanbuleng的博客-优快云博客

CodecWang's Blog

<think>好的,我现在需要帮助用户了解如何使用opencv-python读取图像,并提供示例代码。首先,用户的问题很明确,但作为新手,可能需要详细的步骤说明和代码示例。根据用户提供的引用内容,引用[1]提到在IDE中输入对应的Python代码,而引用[2]则涉及读取、展示和存储图像的方法,包括imread和imshow函数,以及注意BGR格式的问题。 首先,我应该先介绍opencv-python的安装,因为这是使用的前提。用户可能已经安装了,但为了全面性,还是需要提及。然后,重点放在读取图像的方法,即cv2.imread()函数。需要说明参数,比如文件路径和标志参数,比如cv2.IMREAD_COLOR等,并提到默认的BGR格式,这可能和用户预期的RGB不同,需要注意转换。 接下来,示例代码部分需要展示如何读取图像,可能包括检查图像是否成功加载,因为如果路径错误,imread会返回None。然后,展示图像使用cv2.imshow(),但需要提醒用户关于窗口关闭的问题,比如使用cv2.waitKey()和cv2.destroyAllWindows()。此外,保存图像用cv2.imwrite()也是一个常见操作,可以加入。 然后,根据用户提供的引用[2],要强调默认的BGR格式,可能需要转换为RGB,比如使用cv2.cvtColor()函数,并给出示例。这部分对后续处理可能有影响,比如用matplotlib显示时颜色会出错,所以需要特别提醒。 最后,生成相关问题需要考虑用户可能的后续疑问,比如读取失败的原因、不同模式的区别、颜色转换方法、显示和保存的问题,以及与matplotlib的兼容性。这些问题可以帮助用户更深入地理解和解决问题。 需要确保代码语法正确,并且使用中文解释清楚每个步骤。同时,检查是否有遗漏的细节,比如路径的正确写法,或者异常处理的部分。可能用户会遇到路径错误或文件不存在的问题,应该在注意事项中提到。同时,示例代码中的图像路径需要通用,比如使用'image.jpg',并建议用户替换为自己的路径。 总结步骤:安装库、读取图像、检查加载情况、显示图像、颜色空间转换、保存图像。每个步骤给出代码和解释,并注意可能的陷阱,如BGR格式的问题。然后生成相关问题,覆盖常见的使用场景和问题。</think>### 使用OpenCV-Python读取图像的方法及示例代码 #### 1. 安装OpenCV-Python库 ```bash pip install opencv-python ``` #### 2. 读取图像的基本语法 OpenCV通过`cv2.imread()`函数读取图像,支持JPG、PNG、TIFF等格式。 语法:`image = cv2.imread(filename, flags)` - `filename`: 图像文件路径(需包含扩展名) - `flags`: 可选参数,如`cv2.IMREAD_COLOR`(默认,加载彩色图)、`cv2.IMREAD_GRAYSCALE`(灰度图)[^2] #### 3. 示例代码 ```python import cv2 # 读取图像(默认BGR格式) image = cv2.imread('image.jpg') # 替换为实际路径 # 检查图像是否加载成功 if image is None: print("图像加载失败,请检查路径") else: # 显示图像 cv2.imshow('Loaded Image', image) cv2.waitKey(0) # 等待任意按键 cv2.destroyAllWindows() # 关闭窗口 # 转换为RGB格式(用于其他库如Matplotlib) rgb_image = cv2.cvtColor(image, cv2.COLOR_BGR2RGB) # 保存处理后的图像 cv2.imwrite('output_image.jpg', image) ``` #### 4. 关键注意事项 1. **BGR格式问题**:OpenCV默认读取为BGR通道顺序,与其他库(如Matplotlib)的RGB格式冲突,需手动转换[^2] 2. **路径检查**:若路径错误,`image`将返回`None` 3. **显示窗口控制**:`cv2.waitKey(0)`确保图像窗口保持显示状态
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值