1、在raspi-config中使能摄像头

打开树莓派终端,输入sudo raspi-config

完成后重启树莓派

2、检查摄像头运行情况

vcgencmd get_camera

raspistill命令行测试拍照

raspistill -v -o test.jpg

执行后如下图操作:

3、上面都是设置开启摄像头及测试,我们接下来要使用python调用摄像头,完成拍照和直播流的功能。

树莓派4B安装opencv:

sudo apt-get install -y libopencv-dev python3-opencv

网络不好的,下载会中断,多执行以上命令几次就好了,段点续传。

安装完成后

输入命令:

python3

import cv2

看到以下无错误显示即可

4、使用opencv调用树莓派拍照

(1)、 打开usb摄像头读取一张照片

import cv2

import matplotlib.pyplot as plt

#opencv调用csi摄像头优先0,然后usb按顺序排列下去

capture = cv2.VideoCapture(0)

# 获取一帧

ret, frame = capture.read()

plt.imshow(frame[:,:,::-1])#BGRtoRGB

plt.show()

# 释放资源

capture.release()

5、Csi排线的可以直接用树莓派官方系统自带的picamera库

(1)、捕捉一个图像输出至文件

使用capture方法可以轻松将捕捉到的图像输出至指定文件。 下面这个实例是捕捉一个分辨率为1024*768的图像,并将之输出到foo.jpg中

import time

import picamera

with picamera.PiCamera() as camera:

camera.resolution = (1024, 768)

camera.start_preview()

#摄像头预热2秒

time.sleep(2)

#camera.capture('foo.jpg', resize=(320, 240))#可改变分辨率

camera.capture('foo.jpg')

(2)、如果你不想使用有损JPEG编码,并希望加快这一解码过程的话,可以使用picamera自带的picamera.array模块。可以使用PiRGBArray类简单的捕获'brg'格式的数据。(假定RGB与BGR是分辨率相同的数据,只是具有相反的颜色)

import time

import picamera

import picamera.array

import cv2

with picamera.PiCamera() as camera:

camera.start_preview()

time.sleep(2)

with picamera.array.PiRGBArray(camera) as stream:

camera.capture(stream, format='rgb')#format类型:bgrgbh264

# 此时就可以获取到bgr的数据流了

image = stream.array

import matplotlib.pyplot as plt

image_resize = cv2.resize(image,(320, 240)) #opencv改变分辨率

plt.imshow(image_resize)

6、使用python做一个简单的远程监控摄像头

使用opencv 和python自带的http库就能完成(为什么不用picamera?因为通用呀,不一定树莓派,只要装了opencv的硬件,这代码就可以运行),使用浏览器,输入树莓派地址:8080直接显示,上代码:

import cv2

from http import server

import time

#做一个响应主页面html

PAGE="""

Video Streaming Demonstration

Video Streaming Demonstration

"""

# 通过opencv获取实时视频流

video = cv2.VideoCapture(0)

def get_frame(v):

success, image = v.read()

# 因为opencv读取的图片并非jpeg格式,因此要用motion JPEG模式需要先将图片转码成jpg格式图片

ret, jpeg = cv2.imencode('.jpg', image)

return jpeg.tobytes()

def gen(camera):

while True:

frame = get_frame(camera)

# 使用generator函数输出视频流, 每次请求输出的content类型是image/jpeg

yield (b'--frame'

b'Content-Type: image/jpeg' + frame + b'')

class HTTPHandler(server.BaseHTTPRequestHandler):

def do_GET(self):#get数据处理

if self.path == '/': #跳转至默认页面

self.send_response(301)

self.send_header('Location', '/index.html')

self.end_headers()

elif self.path == '/index.html':

content = PAGE.encode('utf-8')

self.send_response(200)

self.send_header('Content-Type', 'text/html')

self.send_header('Content-Length', len(content))

self.end_headers()

self.wfile.write(content)

elif self.path == '/video_feed':

self.send_response(200)

self.send_header('Content-Type','multipart/x-mixed-replace; boundary=frame')

self.end_headers()

while True:

self.wfile.write(next(cam)) #必须用next()才能运行生成器

self.wfile.write(b'')

else:

self.send_error(404)

self.end_headers()

cam = gen(video)#生成器

try:

print("http server start...")

address = ('', 8080)

server = server.HTTPServer(address, HTTPHandler)

server.serve_forever()

finally:

print('done')

opencv resize_树莓派监控摄像头python+picamera或openCV相关推荐

  1. 《OpenCv视觉之眼》Python图像处理六 :Opencv图像傅里叶变换和傅里叶逆变换原理及实现

    本专栏主要介绍如果通过OpenCv-Python进行图像处理,通过原理理解OpenCv-Python的函数处理原型,在具体情况中,针对不同的图像进行不同等级的.不同方法的处理,以达到对图像进行去噪.锐 ...

  2. 《OpenCv视觉之眼》Python图像处理五 :Opencv图像去噪处理之均值滤波、方框滤波、中值滤波和高斯滤波

    本专栏主要介绍如果通过OpenCv-Python进行图像处理,通过原理理解OpenCv-Python的函数处理原型,在具体情况中,针对不同的图像进行不同等级的.不同方法的处理,以达到对图像进行去噪.锐 ...

  3. 《OpenCv视觉之眼》Python图像处理七 :Opencv图像处理之高通滤波和低通滤波原理及构造

    本专栏主要介绍如果通过OpenCv-Python进行图像处理,通过原理理解OpenCv-Python的函数处理原型,在具体情况中,针对不同的图像进行不同等级的.不同方法的处理,以达到对图像进行去噪.锐 ...

  4. 《OpenCv视觉之眼》Python图像处理十 :Opencv图像形态学处理之开运算、闭运算和梯度运算原理及方法

    本专栏主要介绍如果通过OpenCv-Python进行图像处理,通过原理理解OpenCv-Python的函数处理原型,在具体情况中,针对不同的图像进行不同等级的.不同方法的处理,以达到对图像进行去噪.锐 ...

  5. python linux usb摄像头,树莓派用python中的OpenCV输出USB摄像头画面

    本文实例为大家分享了python OpenCV来表示USB摄像头画面的具体代码,供大家参考,具体内容如下 确认Python版本 $ python Python 2.7.13 (default, Jan ...

  6. OpenCV入门(C++/Python)-使用OpenCV裁剪图像(四)

    裁剪是为了从图像中删除所有不需要的物体或区域.甚至突出显示图像的特定功能. 使用OpenCV裁剪没有特定的功能,NumPy数组切片是工作.读取的每个图像都存储在2D数组中(对于每个颜色通道).只需指定 ...

  7. OpenCV入门(C++/Python)- 使用OpenCV标注图像(六)

    使用OpenCV标注图像 用颜色线标注图像 绘制圆 绘制实心圆 绘制矩阵 绘制椭圆 绘制带轮廓和填充半椭圆 使用文本注释图像 为图像和视频添加标注的目的不止一个,包含: 向视频中添加信息 在对象检测的 ...

  8. 《OpenCv视觉之眼》Python图像处理十二 :Opencv图像轮廓提取之基于一阶导数的Roberts算法、Prewitt算法及Sobel算法

    本专栏主要介绍如果通过OpenCv-Python进行图像处理,通过原理理解OpenCv-Python的函数处理原型,在具体情况中,针对不同的图像进行不同等级的.不同方法的处理,以达到对图像进行去噪.锐 ...

  9. 《OpenCv视觉之眼》Python图像处理十六:Opencv图像处理实战一之图像中的硬币检测

    本专栏主要介绍如果通过OpenCv-Python进行图像处理,通过原理理解OpenCv-Python的函数处理原型,在具体情况中,针对不同的图像进行不同等级的.不同方法的处理,以达到对图像进行去噪.锐 ...

最新文章

  1. fields在php中,phpmysqli_num_fields函数怎么用
  2. 推荐系统之基于邻域的算法-------协同过滤算法
  3. 插入,冒泡,选择,快速排序,二分查找
  4. 32位汇编第七讲,混合编程,内联汇编
  5. win7 nginx mysql php_windows7配置Nginx+php+mysql的详细教程
  6. webserver之处理HTTP请求
  7. 华为鸿蒙搭载哪些手机,华为鸿蒙系统支持哪些手机 可以装华为鸿蒙系统手机...
  8. .Net的后台服务技术有哪些?
  9. Spring 使用事务
  10. pm2 多个线程输出一个日志_PM2 源码分析
  11. python调用java之jpype参数类型转换
  12. 解决ubuntu18.04无法连接wifi问题
  13. MacOS打印自定义尺寸配置教程
  14. uniapp 自定义下拉框
  15. API 每日一图API
  16. Kubernetes安装与卸载
  17. 个人作业3-案例分析
  18. Redis_学习笔记
  19. 写给天天说“程序员完了”的人,android开发入门到精通
  20. USB、SATA的传输速度

热门文章

  1. R语言包_recharts
  2. MATLAB 1\n\n
  3. 数字图像处理2:传统插值
  4. android 监听物理返回键,Android应用开发之react-native 监听Android物理返回键
  5. mysql基础什么意思,Mysql一些基本概念
  6. python 自己写个调试工具
  7. 简易重采样resampler的实现
  8. c语言算法6,c语言6函数和算法.ppt
  9. 字符串位加密 php,PHP字符串加密增强版
  10. 3模型大小_分布式训练中数据并行远远不够,「模型并行+数据并行」才是王道...