树莓派用python打开摄像头测试的三种方式附例程

简介

树莓派用python打开摄像头常用三种方法,一种是使用picamare库,另一种是使用OpenCV+picamare,还有一种是单纯使用OpenCV的库,本文分别介绍三种方式

方式一:picamare

1.代码如下:

from picamera import PiCamera
import time

camera = PiCamera()
camera.start_preview()
time.sleep(10)
camera.stop_preview()
  1. 代码解析
    本例程为打开摄像头显示十秒画面,然后关闭预览

此方法注意如果使用VNC远程运行,会出现原画面有图像,但VNC无图像的情况,此时需要在树莓派端的VNC内修改VNC的模式,由传输指令变更为传输画面,但VNC会非常卡顿,慎用。解决方式参考这篇文章
树莓派远程连接工具VNC不显示视频或摄像头画面解决方式

方式二:OpenCV+picamera

  1. 代码如下
#!/usr/bin/python
# -*- coding: utf-8 -*-

"""
机器人摄像头测试demo
1.打开摄像头画面;
2.按键q退出程序,s保存照片
3.可作为程序基础框架使用
"""
__author__ = "River.Yang"
__date__ = "2021/3/24"
__version__ = "1.0"

from picamera.array import PiRGBArray
from picamera import PiCamera
import cv2

# define resolution
resX = 640
resY = 480

def main():
    # 照片存储序列计数
    count = 0
    # 版本管理
    print("当前版本:", __version__)
    # 初始化摄像头
    camera = PiCamera()
    camera.resolution = (resX, resY)
    camera.framerate = 30
    # Use this as our output
    rawCapture = PiRGBArray(camera, size=(resX, resY))

    # capture frames from the camera
    for frame in camera.capture_continuous(rawCapture, format="bgr", use_video_port=True):
        image = frame.array

        # show the frame
        cv2.imshow("Raw Frame", image)

        # if the `q` key was pressed, break from the loop
        key = cv2.waitKey(1) & 0xFF
        if key == ord("q"):
            break
        if key == ord("s"):
            count = count + 1
            cv2.imwrite("testbak" + str(count) + ".jpg", image)
            print("save success")

        # clear the stream in preparation for the next frame
        rawCapture.truncate(0)

    # When everything done, release the capture
    cv2.destroyAllWindows()


if __name__ == '__main__':
    main()

  1. 代码解析
    本例程还是用了picamera作为初始数据传给OpenCV进行调用,代码功能:打开摄像头画面;按键q退出程序,s保存照片。

方式三:OpenCV

  1. 代码如下:
#!/usr/bin/python3
# -*- coding: utf-8 -*-

import cv2


count = 0       # 定义拍照计数变量


def main():
    global count
    cap = cv2.VideoCapture(0)
    cap.set(3, 640)  # 设置分辨率
    cap.set(4, 480)

    while cap.isOpened():
        ret, img = cap.read()  # 视频读入
        if not ret:
            continue
        cv2.imshow('show', img)
        key = cv2.waitKey(30) & 0xFF
        if key == ord("q"):
            break
        elif key == ord("s"):
            count = count + 1
            cv2.imwrite("./testback" + str(count) + ".jpg", img)
            print("save success!  count =", count)


if __name__ == '__main__':
    main()

  1. 代码解析
    纯用了OpenCV打开摄像头, q键退出程序,s键保存照片到当前目录下
    注意 cap = cv2.VideoCapture(0) 这里的参数表示了摄像头的编号,树莓派默认一个摄像头的时候编号为0

·
·
·

欢迎各位老铁一键三连,本号后续会不断更新树莓派、人工智能、STM32、ROS小车相关文章和知识。

大家对感兴趣的知识点可以在文章下面留言,我可以优先帮大家讲解哦

欢迎大家光临我的淘宝小店,会定期推出教程中使用的物美价优的硬件,你的光临就是对我的支持

原创不易,转载请说明出处。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

玩转智能机器人

但行好事,莫问前程,日拱一卒

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值