STM32
直播中

张燕

7年用户 1318经验值
私信 关注
[问答]

STM32MP135如何使用opencv-python或v4l2-ctl打开摄像头,并保存为图片?

如题,我在使用v4l2-ctl和opencv的时候,打开摄像头保存是可以,但是保存出来的图片都很有问题
比如

或者图片上半部分是被压扁的不知道什么色彩的图片,下面全是灰色
我尝试过用opencv更改摄像头参数,如下:
cap.set(6, cv2.VideoWriter.fourcc( 'M', 'J','P', 'G'))# cap.set(cv2.CAP_PROP_CONVERT_RGB, False)cap.set(cv2.CAP_PROP_FRAME_WIDTH, 1920) cap.set(cv2.CAP_PROP_FRAME_HEIGHT, 1080)cap.set(cv2.CAP_PROP_FPS, 30)或者
各种都试过都不行。
但是官方的例程中,直接用v4l推送到media上,直接显示的又是可以的。
请问我该如何使用opencv-python 或v4l2-ctl打开摄像头,并保存为图片?




回帖(1)

h1654155272.9717

2024-5-30 16:19:02
首先,确保您已经正确安装了opencv-python和v4l2-ctl。接下来,我将为您提供一个使用opencv-python打开摄像头并保存图片的示例代码。

1. 导入所需的库:

```python
import cv2
import numpy as np
```

2. 初始化摄像头:

```python
cap = cv2.VideoCapture(0)  # 0是默认摄像头,如果有多个摄像头,请更改为相应的索引
```

3. 设置摄像头参数(可选):

```python
cap.set(cv2.CAP_PROP_FRAME_WIDTH, 1920)
cap.set(cv2.CAP_PROP_FRAME_HEIGHT, 1080)
cap.set(cv2.CAP_PROP_FPS, 30)
```

4. 循环读取摄像头画面并保存图片:

```python
while True:
    ret, frame = cap.read()  # 读取一帧画面

    if not ret:
        print("Failed to grab frame")
        break

    cv2.imshow('frame', frame)  # 显示画面

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

    # 保存图片
    filename = "output_image.jpg"
    cv2.imwrite(filename, frame)
    print(f"Image saved as {filename}")
```

5. 释放摄像头资源并关闭窗口:

```python
cap.release()
cv2.destroyAllWindows()
```

将以上代码保存为.py文件,然后在终端中运行该文件。这将打开摄像头,并在按下'q'键时退出循环并保存图片。

关于您提到的图片问题,可能是由于摄像头驱动或参数设置不正确导致的。您可以尝试以下方法:

1. 检查摄像头驱动是否已正确安装并更新。
2. 尝试使用不同的摄像头参数,例如分辨率、帧率等。
3. 确保摄像头硬件没有损坏或故障。

如果问题仍然存在,建议您查阅STM32MP135的官方文档,了解如何正确配置和使用摄像头。
举报

更多回帖

发帖
×
20
完善资料,
赚取积分