Python 官方文档:入门教程 => 点击学习
目录 1.介绍 2.系统依赖 (1)OpenCV-Python库 (2)Tkinter库 (3)Pillow库 (4)Time库 3.系统代码 4.效果展示 5.注意事项 1.介绍 这是一个有趣的项目,通过python程
目录
这是一个有趣的项目,通过python程序调用系统的摄像头,实现了拍照的功能.
我的主页还有一些文章介绍了其他有趣的项目,可以动手尝试一下:
代码写不完了的博客_CSDN博客代码写不完了擅长Python项目,python操作文件,系统环境配置,等方面的知识,代码写不完了关注pandas,python,Django,pygame,spark,pip,virtualenv,numpy,flask领域.https://blog.csdn.net/spx_0108
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是一款功能完备的计算机视觉库,它使得从图像和视频数据中获取信息或进行操作变得容易而直观。
Tkinter是Python内置的GUI(图形用户界面)库,它提供了创建基于GUI的桌面应用程序所需的组件和工具。Tkinter是Python自带的标准库,不需要额外安装即可使用。
Tkinter库包含了几个常用的模块,包括Tk核心模块(Tkinter),多个小部件模块以及布局管理模块。Tkinter小部件是构建GUI界面的基本单元,例如按钮、标签、文本框、下拉菜单、组合框和滚动条等。
Tkinter使用简单,容易上手。在使用Tkinter之前,通常需要了解一下一些基本概念和术语,比如主窗口、小部件、事件循环以及回调函数等。
在Python中,使用Tkinter可以快速构建图形用户界面,让用户可以通过图形化的操作来使用和操作程序。同时,Tkinter也支持跨平台开发,可以在多种操作系统上使用,例如Windows、Linux和Mac OS X。总的来说,Tkinter是一个非常方便实用的GUI库,尤其适用于初学者和快速开发小型应用。
Pillow库是由从Python Imaging Library(PIL)分支出来的一个Python Imaging Library的分支,它提供了处理图像的基本功能,例如加载、显示、编辑、保存等。
Pillow库支持多种常见的图像格式,可以处理各种类型的图像数据,包括位图、矢量图和RAW格式等。此外,Pillow库还提供了图像转换、颜色调整、滤波、错切变形、裁剪和缩放等一系列辅助功能。
Pillow库的API简单易用,因此它非常适合用于处理图像的初学者和中级开发者。开发者可以通过Pillow库快速地添加图像处理的功能,使他们的应用能够支持更多的图像处理需求。
总之,Pillow库是Python中处理图像和图像数据最常用最受欢迎的库之一。在构建需要处理图像和图形数据的应用时,使用Pillow库可以很快地完成一些复杂的任务,并将应用提升到更高的水平。
time库是Python中用于获取和操作时间的标准库。它提供了一系列函数,可以用于获取当前时间、计算时间差、格式化时间字符串等。
time库包含了很多方法,其中一些重要的方法如下:
time()
:返回当前时间的时间戳(从1970年1月1日开始的秒数)。
gmtime()
:返回当前时间的UTC时间元组。
localtime()
:使用本地时区返回当前时间的时间元组。
asctime()
:将时间元组转换为可读字符串形式。
strftime()
:将时间元组格式化为指定的格式。
sleep()
:使当前线程暂停指定的时间。
使用time库可以获取当前时间、计算函数运行时间、进行时间戳转换等各种操作。time库是Python的标准库之一,不需要额外安装即可使用,而且它是处理时间的最基本、最常用的库之一。如果你需要在Python中操作时间,在熟练掌握它的使用后,time库将成为你的得力工具之一。
import timeimport cv2import tkinter as tkfrom PIL import Image, ImageTkclass 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 对象,启动程序
如果出现报错,首先检查需要是否缺失需要导入的包,如果有缺失,可以在终端安装:
pip install 包名
如果出现其他报错,检查一下你电脑的摄像头是否可用,以及检查摄像头是否正在被其他应用使用.
来源地址:https://blog.csdn.net/spx_0108/article/details/131129100
--结束END--
本文标题: python调用摄像头实现拍照功能
本文链接: https://www.lsjlt.com/news/414493.html(转载时请注明来源链接)
有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341
下载Word文档到电脑,方便收藏和打印~
2024-03-01
2024-03-01
2024-03-01
2024-02-29
2024-02-29
2024-02-29
2024-02-29
2024-02-29
2024-02-29
2024-02-29
回答
回答
回答
回答
回答
回答
回答
回答
回答
回答
0