当前位置: 首页 > news >正文

树莓派开发笔记13-树莓派环境下的CSI摄像头实验

github主页:https://github.com/snqx-lqh
gitee主页:https://gitee.com/snqx-lqh
本项目github地址:https://github.com/snqx-lqh/RaspberryPiLearningNotes
本项目gitee地址:https://gitee.com/snqx-lqh/RaspberryPiLearningNotes
欢迎交流

说明

这篇文章说一下树莓派CSI摄像头的使用方法,如果使用的是我这一版镜像,默认CSI摄像头是使能了的,只需要连接好摄像头后reboot即可。

测试

重启后,使用以下指令

ls /dev/video*

如果查看到video0设备,即是检测到了设备,可以在树莓派终端下输入以下指令测试树莓派的摄像头。

#测试摄像头
libcamera-hello 
#拍照
libcamera-jpeg -o test.jpg

但是呢,你使用这个,就不能使用opencv来掉摄像头了。如果要能用opencv掉摄像头

修改config.txt文件 输入

sudo nano /boot/firmware/config.txt

在文件最后加上如下命令:加在最后【all】

gpu_mem=128
start_x=1

注释掉原来的摄像头自动检测语句

#camera_auto_detect=1

Ctrl+o 写入 Ctrl+x 退出

修改/etc/modules输入

sudo nano /etc/modules

在最后面添加如下命令

bcm2835-v4l2

Ctrl+o 写入 Ctrl+x 退出

保存后,重启系统!!!验证

vcgencmd get_camera

得到 supported=1 detected=1,则说明摄像头可以工作了

带来的问题 修改后输入:

libcamera-hello

命令出现“no cameras available”报错,就是原来的又不行了。网上有位网友说pios把摄像头驱动更换到了libcamera,而opencv当前还不支持libcamera,是你opencv不能用的根本原因。最终解决的办法就是回滚到老版的v4l2驱动,opencv支持v4l2,所以就ok了。这种方法是退回到老的驱动来实现opencv的读取。

下面将分别使用C++和Python版本的opencv调用这个摄像头。

C++版

首先我们先安装一些opencv库,这个是编译好的opencv,如果自己在树莓派上编译花的时间太久了

sudo apt-get install libopencv-dev   libopencv-contrib-dev

然后写一个实例,这个只是一个打开摄像头

#include <iostream>
#include <stdio.h>
#include <opencv2/opencv.hpp>
#include <opencv2/highgui/highgui.hpp>
#include <opencv2/imgproc/imgproc.hpp>using namespace std;  
using namespace cv;  int main(int argc, char** argv)  
{  // 打开视频文件  VideoCapture cap(0);  // 检查是否成功打开视频文件  if (!cap.isOpened())  {  std::cerr << "无法打开视频文件" << std::endl;  return -1;  }  // 设置窗口大小  namedWindow("Video", WINDOW_NORMAL);  resizeWindow("Video", 400, 400);  // 循环播放视频直到按下退出键  while (true)  {  Mat frame;  // 从视频文件中读取下一帧  cap >> frame;  // 如果读取的帧为空,则视频播放结束,退出循环  if (frame.empty())  break;  // 在窗口中显示当前帧  imshow("Video", frame);  // 等待一段时间,然后继续循环(按Q键退出)  if (waitKey(30) == 'q' || waitKey(30) == 27) // 'q'键或Esc键  break;  }  // 释放视频文件和窗口资源  cap.release();  destroyAllWindows();  return 0;  
}

然后我们使用cmake来构建makefile,关于cmake的知识,可以去看其他博主的讲解,很多比较详细

cmake_minimum_required(VERSION 3.16.3)
project(main)
set(CMAKE_CXX_STANDARD 14)
find_package(OpenCV REQUIRED)
include_directories(${OpenCV_DIRCTORIES})
add_executable(main main.cpp)
target_link_libraries(main ${OpenCV_LIBRARIES})

然后使用以下指令执行

cmake .
make
./main

第一次会比较慢,要等一会。

Python版

安装opencv库,但是首先先建立虚拟环境,如果你有虚拟环境就不用管这一步

python -m venv ~/myenv        #创建虚拟环境,myenv就是环境名
source ~/myenv/bin/activate   #使能我们创建的虚拟环境

其他env操作

deactivate #退出环境

安装opencv相关

pip3 install opencv-contrib-python -i https://pypi.tuna.tsinghua.edu.cn/simple
pip3 install opencv-python -i https://pypi.tuna.tsinghua.edu.cn/simple

写一个简单的调用摄像头的代码

import cv2capture = cv2.VideoCapture(0)  
while (capture.isOpened()):  retval, image = capture.read()  cv2.imshow("Video", image)  key = cv2.waitKey(1)  if key == 32:  breakcapture.release() 
cv2.destroyAllWindows()  

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • centos 虚拟机器刚刚安装没有ip地址的问题
  • 微软AI人工智能认证有哪些?
  • ChatGPT不同模型在论文写作中的优势和应用
  • 044—pandas 按组将属性和值转为行
  • GRL CVPR2023图像修复 使用笔记
  • IDM是海外加速器吗 IDM在国内好用吗
  • leetcode 438.找到字符串中所有字母异位词
  • 突破编程:C++中的组合模式(Composite Pattern)
  • linux下搭建MySQL8.0.25一主一从
  • rust 日志记录与跟踪
  • 沉浸式解压小视频在哪找?非常减压的几个视频素材网站分享
  • NLP发展脉络-->特征优化阶段
  • SAM 2——视频和图像实时实例分割的全新开源模型
  • matlab实现粒子群优化算法
  • AI学习记录 - 怎么理解 torch 的 nn.Conv2d
  • 【跃迁之路】【463天】刻意练习系列222(2018.05.14)
  • Apache Spark Streaming 使用实例
  • CSS实用技巧
  • Hexo+码云+git快速搭建免费的静态Blog
  • Javascript编码规范
  • Java基本数据类型之Number
  • java小心机(3)| 浅析finalize()
  • Java应用性能调优
  • JS基础篇--通过JS生成由字母与数字组合的随机字符串
  • JS题目及答案整理
  • Linux Process Manage
  • PHP的类修饰符与访问修饰符
  • Spring核心 Bean的高级装配
  • 编写高质量JavaScript代码之并发
  • 后端_MYSQL
  • 批量截取pdf文件
  • 扑朔迷离的属性和特性【彻底弄清】
  • 普通函数和构造函数的区别
  • 实战|智能家居行业移动应用性能分析
  • 数组的操作
  • 学习笔记:对象,原型和继承(1)
  • ​总结MySQL 的一些知识点:MySQL 选择数据库​
  • #window11设置系统变量#
  • #如何使用 Qt 5.6 在 Android 上启用 NFC
  • (Java实习生)每日10道面试题打卡——JavaWeb篇
  • (Redis使用系列) SpringBoot 中对应2.0.x版本的Redis配置 一
  • (补)B+树一些思想
  • (二)PySpark3:SparkSQL编程
  • (附源码)springboot建达集团公司平台 毕业设计 141538
  • (附源码)ssm高校升本考试管理系统 毕业设计 201631
  • (附源码)ssm基于微信小程序的疫苗管理系统 毕业设计 092354
  • (附源码)计算机毕业设计SSM疫情下的学生出入管理系统
  • (三)Honghu Cloud云架构一定时调度平台
  • (五)c52学习之旅-静态数码管
  • (五)MySQL的备份及恢复
  • (已解决)报错:Could not load the Qt platform plugin “xcb“
  • (转载)跟我一起学习VIM - The Life Changing Editor
  • * 论文笔记 【Wide Deep Learning for Recommender Systems】
  • .babyk勒索病毒解析:恶意更新如何威胁您的数据安全
  • .NET CLR基本术语