python调用摄像头实现拍照功能

这篇具有很好参考价值的文章主要介绍了python调用摄像头实现拍照功能。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

目录

1.介绍

2.系统依赖

(1)OpenCV-Python库

(2)Tkinter库

(3)Pillow库

(4)Time库

3.系统代码

4.效果展示

5.注意事项


1.介绍

        这是一个有趣的项目,通过Python程序调用系统的摄像头,实现了拍照的功能.
        我的主页还有一些文章介绍了其他有趣的项目,可以动手尝试一下:

代码写不完了的博客_CSDN博客代码写不完了擅长Python项目,python操作文件,系统环境配置,等方面的知识,代码写不完了关注pandas,python,django,pygame,spark,pip,virtualenv,numpy,flask领域.https://blog.csdn.net/spx_0108

2.系统依赖

(1)OpenCV-Python库

        OpenCV-Python是一个基于Python的计算机视觉库,它可以用于处理图像和视频数据。OpenCV(开源计算机视觉库)最初是由英特尔公司于1999年开发的。OpenCV支持不同平台像Windows,Linux,Android和Mac OS X,同时也支持不同的编程语言,包括C++和Python等。

        OpenCV-Python封装了OpenCV C++库中的函数,并为Python提供了简单易用的API。Python API对OpenCV库的调用方式相对更加简单和直观,这个特点使OpenCV-Python非常适合初学者和快速原型开发。

        OpenCV-Python中涵盖了许多计算机视觉领域的常用算法和函数,例如图像处理和分析、目标检测和跟踪、机器学习和深度学习等。OpenCV-Python也提供了一些图形用户界面和多媒体处理等模块,方便用户进行图像和视频的输入输出操作。

        总的来说,OpenCV-Python是一款功能完备的计算机视觉库,它使得从图像和视频数据中获取信息或进行操作变得容易而直观。

(2)Tkinter库

        Tkinter是Python内置的GUI(图形用户界面)库,它提供了创建基于GUI的桌面应用程序所需的组件和工具。Tkinter是Python自带的标准库,不需要额外安装即可使用。

        Tkinter库包含了几个常用的模块,包括Tk核心模块(Tkinter),多个小部件模块以及布局管理模块。Tkinter小部件是构建GUI界面的基本单元,例如按钮、标签、文本框、下拉菜单、组合框和滚动条等。

        Tkinter使用简单,容易上手。在使用Tkinter之前,通常需要了解一下一些基本概念和术语,比如主窗口、小部件、事件循环以及回调函数等。

        在Python中,使用Tkinter可以快速构建图形用户界面,让用户可以通过图形化的操作来使用和操作程序。同时,Tkinter也支持跨平台开发,可以在多种操作系统上使用,例如Windows、Linux和Mac OS X。总的来说,Tkinter是一个非常方便实用的GUI库,尤其适用于初学者和快速开发小型应用。

(3)Pillow库

        Pillow库是由从Python Imaging Library(PIL)分支出来的一个Python Imaging Library的分支,它提供了处理图像的基本功能,例如加载、显示、编辑、保存等。

        Pillow库支持多种常见的图像格式,可以处理各种类型的图像数据,包括位图、矢量图和RAW格式等。此外,Pillow库还提供了图像转换、颜色调整、滤波、错切变形、裁剪和缩放等一系列辅助功能。

        Pillow库的API简单易用,因此它非常适合用于处理图像的初学者和中级开发者。开发者可以通过Pillow库快速地添加图像处理的功能,使他们的应用能够支持更多的图像处理需求。

        总之,Pillow库是Python中处理图像和图像数据最常用最受欢迎的库之一。在构建需要处理图像和图形数据的应用时,使用Pillow库可以很快地完成一些复杂的任务,并将应用提升到更高的水平。

(4)Time库

        time库是Python中用于获取和操作时间的标准库。它提供了一系列函数,可以用于获取当前时间、计算时间差、格式化时间字符串等。

time库包含了很多方法,其中一些重要的方法如下:

  • time():返回当前时间的时间戳(从1970年1月1日开始的秒数)。

  • gmtime():返回当前时间的UTC时间元组。

  • localtime():使用本地时区返回当前时间的时间元组。

  • asctime():将时间元组转换为可读字符串形式。

  • strftime():将时间元组格式化为指定的格式。

  • sleep():使当前线程暂停指定的时间。

        使用time库可以获取当前时间、计算函数运行时间、进行时间戳转换等各种操作。time库是Python的标准库之一,不需要额外安装即可使用,而且它是处理时间的最基本、最常用的库之一。如果你需要在Python中操作时间,在熟练掌握它的使用后,time库将成为你的得力工具之一。

3.系统代码

import time
import cv2
import tkinter as tk
from PIL import Image, ImageTk


class CameraApp:
    def __init__(self):
        # 创建界面
        self.window = tk.Tk()  # 创建一个窗口对象
        self.window.title("照相机")  # 设置窗口标题
        self.window.geometry("700x600")  # 设置窗口大小

        # 创建显示拍摄照片的控件
        self.photo_label = tk.Label(self.window, width=700, height=550)  # 创建一个标签控件
        self.photo_label.pack()  # 将标签控件添加到窗口中

        # 创建拍照按钮
        self.take_photo_button = tk.Button(self.window, text="拍照", command=self.take_photo)  # 创建一个按钮控件
        self.take_photo_button.pack()  # 将按钮控件添加到窗口中

        # 打开摄像头
        self.cap = cv2.VideoCapture(0)  # 创建一个 VideoCapture 对象,打开默认摄像头
        _, self.frame = self.cap.read()  # 读取摄像头的一帧数据
        self.frame = cv2.cvtColor(self.frame, cv2.COLOR_BGR2RGB)  # 将 BGR 格式的图片转换为 RGB 格式

        self.image_flipped = True  # 控制是否镜像照片

        # 设置界面保持更新
        self.update_frame()

        self.window.mainloop()  # 进入窗口消息循环,等待用户操作

    def update_frame(self):
        _, self.frame = self.cap.read()  # 读取新的摄像头帧数据

        if self.image_flipped:
            self.frame = cv2.flip(self.frame, 1)  # 如果需要镜像显示照片,则在更新帧时进行翻转操作

        self.frame = cv2.cvtColor(self.frame, cv2.COLOR_BGR2RGB)  # 将 BGR 格式的图片转换为 RGB 格式

        # 将摄像头帧转为 PIL 图片格式
        pil_image = Image.fromarray(self.frame)

        # 将 PIL 图片转为 Tkinter 中可以显示的图片格式
        tk_image = ImageTk.PhotoImage(image=pil_image)

        # 更新显示照片的控件图片
        self.photo_label.configure(image=tk_image)  # 将标签控件的图片属性设置为新的图片
        self.photo_label.image = tk_image  # 将标签控件的 image 属性设置为新的图片

        # 循环更新帧
        self.window.after(10, self.update_frame)  # 在 10 毫秒之后调用 update_frame 函数,实现不断更新摄像头帧的效果

    def take_photo(self):
        # 拍照
        _, frame = self.cap.read()  # 读取摄像头的一帧数据

        if self.image_flipped:
            frame = cv2.flip(frame, 1)  # 如果需要镜像照片,则在拍照时进行翻转操作

        # 获取十三位时间戳
        now_time = Utils().getCurrentDateLong()  # 使用 Utils 类中的方法获取当前时间的 13 位时间戳

        # 保存照片,以时间戳命名
        cv2.imwrite(f"./data/{now_time}.jpg", frame)  # 保存图片到指定路径下,以当前时间戳作为文件名

        # 将照片显示在控件中
        frame = cv2.cvtColor(frame, cv2.COLOR_BGR2RGB)  # 将 BGR 格式的图片转换为 RGB 格式
        pil_image = Image.fromarray(frame)  # 将摄像头帧转换为 PIL 图片格式
        tk_image = ImageTk.PhotoImage(image=pil_image)  # 将 PIL 图片转为 Tkinter 可以显示的图片格式
        self.photo_label.configure(image=tk_image)  # 将标签控件的图片属性设置为新的图片
        self.photo_label.image = tk_image  # 将标签控件的 image 属性设置为新的图片

        print("照片已保存!")


class Utils():
    # 获取 13 位的时间戳
    def getCurrentDateLong(self):
        current_timestamp = int(round(time.time() * 1000))  # 获取当前时间的时间戳(精确到毫秒)
        return current_timestamp

# 主函数
if __name__ == "__main__":
    app = CameraApp()  # 创建 CameraApp 对象,启动程序

4.效果展示

python控制自己的手机摄像头拍照,并把csdn,Python项目,python,开发语言

python控制自己的手机摄像头拍照,并把csdn,Python项目,python,开发语言

5.注意事项

        如果出现报错,首先检查需要是否缺失需要导入的包,如果有缺失,可以在终端安装:

        pip install 包名

        如果出现其他报错,检查一下你电脑的摄像头是否可用,以及检查摄像头是否正在被其他应用使用.文章来源地址https://www.toymoban.com/news/detail-767135.html

到了这里,关于python调用摄像头实现拍照功能的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • vue调用电脑端摄像头实时拍照

    点击照相机拍照,弹出照相机拍照弹窗,点击拍照按钮,截取录像的帧,点击保存,提交数据给后台。 1.html模块 2.css模块 就是一个弹窗,这里就不进行展示了。 3.js模块

    2024年02月12日
    浏览(51)
  • 【QT】QT调用电脑摄像头并拍照

    建议搭配视频食用: 【【QT】QT调用电脑摄像头并拍照】 https://www.bilibili.com/video/BV1pc411G7qy/?share_source=copy_webvd_source=c0d9dd4e64b88e4dbf93ac009c2010dc 一、在pro文件中添加‘multimedia multimediawidgets’ 二、在ui界面创建一个widget并改名为camera用于展示摄像头内容和pushbutton 用于拍照,并右键

    2024年02月12日
    浏览(42)
  • Vue2调用电脑摄像头权限,并拍照

    电脑端需要调取用户摄像头进行拍照

    2024年02月10日
    浏览(43)
  • Unity3D:调用安卓摄像头拍照

    操作步骤:创建脚步并挂载到Main Camera上 仍未解决的问题:导入到安卓平台测试时,拍照按钮不能随着屏幕旋转而变换位置; 拍照时会把拍照按钮也截进去。

    2024年02月06日
    浏览(51)
  • uniapp开发h5或小程序调用摄像头拍照,录屏

    uniapp开发h5或小程序调用摄像头拍照,录屏 如图 注意,小程序上线使用需要配置upload域名。

    2024年02月12日
    浏览(66)
  • opencv在linux上调用usb摄像头进行拍照

    一般video1就是usb摄像头

    2024年02月06日
    浏览(50)
  • vue + element 谷歌浏览器调用电脑摄像头拍照

     本项目使用ruoyi-vue-plus (使用文件上传功能 去ruoyi-vue-plus查看封装的js,文件目录 utils/request.js  封装了axios) 框架推荐:https://gitee.com/JavaLionLi/RuoYi-Vue-Plus 抄袭一下项目例子:   vue + element 实现电脑拍照例子:https://gitee.com/devil_mask/camera-demo.git  界面:  script: 上传图片:  

    2024年02月12日
    浏览(35)
  • H5 页面通过navigator.mediaDevices.getUserMedia调用手机摄像头拍照上传

    需求: 某知名化妆品牌,要做个在线问卷调查。需要试用着自拍上传 注:使用navigator.mediaDevices.getUserMedia 需要使用https请求协议否者视为不安全,无法访问,开发阶段需要将启动改为https 在package.json中 前端开发环境启动项目将http协议改为https协议    授权,默认前置,切换

    2024年02月11日
    浏览(58)
  • h5端调用手机摄像头实现扫一扫功能

     一、前言         最近有遇到一个需求,在h5浏览器中实现扫码功能,其本质便是打开手机摄像头定时拍照,特此做一个记录。主要技术栈采用的是vue2,使用的开发工具是hbuilderX。         经过测试发现部分浏览器并不支持打开摄像头,测试了果子,华子和米,发现

    2024年03月14日
    浏览(87)
  • 【android开发-21】android中调用系统摄像头camera拍照和相册的用法详解

    1, 调用摄像头 在Android中,调用系统摄像头拍照需要使用Intent来启动Camera应用,并在应用中设置相应的权限。下面是一个简单的例子:

    2024年02月21日
    浏览(48)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包