树莓派使用opencv

目录

一. 使用摄像头

1. 将摄像头连接到我们树莓派

二.升级系统

三.在raspi-config中使能SSH和摄像头服务

二. 安装opencv

1.查看自己系统的python

2.换源(非常非常重要,成不成功主要看这里)

3. 安装opencv

三. 测试opencv

四. 解决摄像头分辨率问题

五. opencv实现颜色追踪与识别

六. 可视化HSV色彩空间阈值编辑器

七. 参考链接


一. 使用摄像头

1. 将摄像头连接到我们树莓派

注意:将摄像头的USB口连接到树莓派的任意一个USB口后再开机。一定要先接摄像头再开机,不然树莓派无法识别。

输入lsusb或者ls /dev/video*命令

查看是否有ID:05a3:9230 ARC International Camera或者/dev/video0 设备

有的话说明树莓派已经检测到我们的摄像头设备,可以进行下一步操作

二.升级系统

要使用摄像头模块,你必须使用一个较新的操作系统,它能识别出摄像头模块已连接上。最简单的方法就是直接从树莓派官网去下载一个Raspbian的系统镜像然后安装到一个全新的SD卡上。

不管你用的Raspbian系统版本是什么,都强烈推荐你用如下的命令来更新一下系统:

  sudo apt-get update

  sudo apt-get upgrade

三.在raspi-config中使能SSH和摄像头服务

sudo raspi-config

选择第5个,按enter键进入配置

 先选择第二个SSH:使能SSH服务(如果已开SSH请忽略此步骤)。

 

接下来选择第一个Camera:使能摄像头服务。 

 

重启我们的树莓派。

sudo reboot

二. 安装opencv

本篇文章是针对python3.8 版本以下的python。

1.查看自己系统的python

清华提供的python有两个版本,分别为python 2.7.16 和 python 3.7.3 

2.换源(非常非常重要,成不成功主要看这里)

先在 LX_终端 输入以下代码

sudo nano /etc/apt/sources.list

然后得到如下界面

 将里面的代码注释掉(代码前加 # )或者 直接全部删掉,完成后效果如下

 

  将以下代码粘贴进去

deb http://mirrors.tuna.tsinghua.edu.cn/raspbian/raspbian/ buster main non-free contrib rpi
deb-src http://mirrors.tuna.tsinghua.edu.cn/raspbian/raspbian/ buster main non-free contrib rpi

 随后同时按下 Ctrl + x 键,得到如下界面

然后按 y 键,再回车即可,这样就换好一个源了

同理,按照上述步骤更改下一个源
 输入以下代码

sudo nano /etc/apt/sources.list.d/raspi.list

将以下代码粘贴进去

deb http://mirrors.tuna.tsinghua.edu.cn/raspberrypi/ buster main ui

换源结束,输入以下代码 (这一步一定要有,不然会出错)

sudo apt-get update

3. 安装opencv

上述步骤完成后,输入以下代码(基于python3)

sudo apt-get install python3-opencv -y

出现下面的界面就是安装完成了,如果报错去看一下自己换源了没有,或者源是否正确以及是否 sudo apt-get update

三. 测试opencv

输入: python3

然后再输入: import cv2

四. 解决摄像头分辨率问题

        树莓派上opencv默认读取YUY2格式,所以我们要将视频切换成MJPG格式。且要更改摄像头的分辨率。

# -*- coding: cp936 -*-

"""
Author:zhangbo
Date:2019-11-07
Discription:Read Camaro picture and save 
"""

import cv2,os,time,datetime
import numpy as np

class CamaroCap(object):

    """ 打开视频流 """
    def __init__(self):
        
        self.cap = cv2.VideoCapture(0)
        #self.cap.set(cv2.CAP_PROP_FPS, 120) 这个有时候生效,有时候不生效不知道是什么原因
        self.cap.set(cv2.CAP_PROP_FRAME_WIDTH, 800)
        self.cap.set(cv2.CAP_PROP_FRAME_HEIGHT, 600)
        self.cap.set(cv2.CAP_PROP_FOURCC, cv2.VideoWriter_fourcc('M', 'J', 'P', 'G'))

    
    """ 图片信息打印 """      
    def get_image_info(self,image):
        print(type(image))
        print(image.shape)
        print(image.size)
        print(image.dtype)
        pixel_data = np.array(image)
        print(pixel_data)


    """ 逐帧读取数据并保存图片到本地制定位置 """
    def Camaro_image(self):
        i = 0
        while(True):
            ret,frame = self.cap.read() #ret:True或者False,代表有没有读取到图片;frame:表示截取到一帧的图片
            if ret == False:
                break
            
            #self.get_image_info(frame) # print("打印图片信息") 注意:调试的时候可以打开,如果是一直运行程序,建议把这行代码注释掉,避免影响内存占用          
            
            cv2.imshow('capture',frame) # 展示图片

            mtime = datetime.datetime.now().strftime('%Y-%m-%d_%H_%M_%S')
            print(mtime)
            
            cv2.imwrite(r"D:\image\\" + str(i) + str("-") + mtime + ".jpg",frame)  # 保存图片
            i = i + 1

            if cv2.waitKey(1) & 0xFF == ord('q'): 
                break
                
if __name__ == '__main__':

    outmasages = CamaroCap() 
    
    outmasages.Camaro_image() # 调用摄像头
    
    outmasages.cap.release() # 释放对象和销毁窗口
    cv2.destroyAllWindows()
    

五. opencv实现颜色追踪与识别

import cv2
import numpy as np #导入库
blue_lower = np.array([100,43,46])
blue_upper = np.array([124,255,255]) #设置颜色区间
cap = cv2.VideoCapture(0)  #打开摄像头
cap.set(3,640)
cap.set(4,480)  #设置窗口的大小
while 1: #进入无线循环
    ret,frame = cap.read() #将摄像头拍摄到的画面作为frame的值
    frame = cv2.GaussianBlur(frame,(5,5),0) #高斯滤波GaussianBlur() 让图片模糊
    hsv = cv2.cvtColor(frame,cv2.COLOR_BGR2HSV) #将图片的色域转换为HSV的样式 以便检测
    mask = cv2.inRange(hsv,blue_lower,blue_upper)  #设置阈值,去除背景 保留所设置的颜色

    mask = cv2.erode(mask,None,iterations=2) #显示腐蚀后的图像
    mask = cv2.GaussianBlur(mask,(3,3),0) #高斯模糊
    res = cv2.bitwise_and(frame,frame,mask=mask) #图像合并

    cnts = cv2.findContours(mask.copy(),cv2.RETR_EXTERNAL,cv2.CHAIN_APPROX_SIMPLE)[-2] #边缘检测

    if len(cnts) >0 : #通过边缘检测来确定所识别物体的位置信息得到相对坐标
        cnt = max(cnts,key=cv2.contourArea)
        (x,y),radius = cv2.minEnclosingCircle(cnt)
        cv2.circle(frame,(int(x),int(y)),int(radius),(255,0,255),2) #画出一个圆
        print(int(x),int(y))
    else:
        pass
    cv2.imshow('frame',frame) #将具体的测试效果显示出来
    cv2.imshow('mask',mask)
    cv2.imshow('res',res)
    if cv2.waitKey(5) & 0xFF == 27: #如果按了ESC就退出 当然也可以自己设置
        break

cap.release()
cv2.destroyAllWindows() #后面两句是常规操作,每次使用摄像头都需要这样设置一波

六. 可视化HSV色彩空间阈值编辑器

# -*- coding:utf-8 -*-
 
import cv2
import numpy as np
 
"""
功能:读取一张图片,显示出来,转化为HSV色彩空间
     并通过滑块调节HSV阈值,实时显示
"""
 
image = cv2.imread('1.jpg') # 根据路径读取一张图片,opencv读出来的是BGR模式
cv2.imshow("BGR", image) # 显示图片
 
hsv_low = np.array([0, 0, 0])
hsv_high = np.array([0, 0, 0])
 
# 下面几个函数,写得有点冗余
 
def h_low(value):
    hsv_low[0] = value
 
def h_high(value):
    hsv_high[0] = value
 
def s_low(value):
    hsv_low[1] = value
 
def s_high(value):
    hsv_high[1] = value
 
def v_low(value):
    hsv_low[2] = value
 
def v_high(value):
    hsv_high[2] = value
 
cv2.namedWindow('image',cv2.WINDOW_AUTOSIZE)
 
#H low:
#    0:指向整数变量的可选指针,该变量的值反映滑块的初始位置。
#  179:表示滑块可以达到的最大位置的值为179,最小位置始终为0。
#h_low:指向每次滑块更改位置时要调用的函数的指针,指针指向h_low元组,有默认值0。
(此函数的原型应为void XXX (int, void *); ,其中第一个参数是轨迹栏位置,第二个参数是用户数据(请参阅下一个参数)。如果回调是NULL指针,则不调用任何回调,而仅更新值。)
cv2.createTrackbar('H low', 'image', 0, 179, h_low) 
cv2.createTrackbar('H high', 'image', 0, 179, h_high)
cv2.createTrackbar('S low', 'image', 0, 255, s_low)
cv2.createTrackbar('S high', 'image', 0, 255, s_high)
cv2.createTrackbar('V low', 'image', 0, 255, v_low)
cv2.createTrackbar('V high', 'image', 0, 255, v_high)
 
while True:
    dst = cv2.cvtColor(image, cv2.COLOR_BGR2HSV) # BGR转HSV
    dst = cv2.inRange(dst, hsv_low, hsv_high) # 通过HSV的高低阈值,提取图像部分区域
    cv2.imshow('dst', dst)
    if cv2.waitKey(1) & 0xFF == ord('q'):
        break
cv2.destroyAllWindows()

至此,我们就完成了树莓派从镜像烧录到实现颜色识别,这样我们最基础的使用树莓派即完成了

七. 参考链接

1. https://blog.csdn.net/weixin_45911959/article/details/122709090?utm_source=miniapp_weixin

2.https://blog.csdn.net/NoamaNelson/article/details/103135056

3.https://blog.csdn.net/weixin_43635647/article/details/97397153?utm_source=miniapp_weixin

4. https://blog.csdn.net/luoyir1997/article/details/109159792?utm_source=miniapp_weixin

5. gitee链接分享:

树莓派: 树莓派从镜像烧录到实现颜色识别icon-default.png?t=N7T8https://gitee.com/didiao-hhh/raspberry-pi

  • 26
    点赞
  • 57
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
树莓派上配置OpenCV可以按照以下步骤进行: 1. 更新系统:首先,确保你的树莓派系统是最新的,可以通过运行以下命令进行更新: ``` sudo apt-get update sudo apt-get upgrade ``` 2. 安装依赖包:OpenCV需要一些依赖库,你可以通过运行以下命令来安装它们: ``` sudo apt-get install build-essential cmake pkg-config sudo apt-get install libjpeg-dev libtiff5-dev libjasper-dev libpng-dev sudo apt-get install libavcodec-dev libavformat-dev libswscale-dev libv4l-dev sudo apt-get install libxvidcore-dev libx264-dev sudo apt-get install libgtk-3-dev sudo apt-get install libcanberra-gtk* sudo apt-get install libatlas-base-dev gfortran ``` 3. 下载OpenCV源代码:你可以从OpenCV官方网站下载最新的源代码,并解压缩到一个合适的目录中。 4. 编译和安装OpenCV:进入解压缩后的OpenCV目录,创建一个build目录,并进入该目录。然后运行以下命令进行编译和安装: ``` cmake -D CMAKE_BUILD_TYPE=RELEASE \ -D CMAKE_INSTALL_PREFIX=/usr/local \ -D OPENCV_EXTRA_MODULES_PATH=~/opencv_contrib/modules \ -D ENABLE_NEON=ON \ -D ENABLE_VFPV3=ON \ -D BUILD_TESTS=OFF \ -D INSTALL_PYTHON_EXAMPLES=OFF \ -D BUILD_EXAMPLES=OFF .. ``` ``` make -j4 sudo make install sudo ldconfig ``` 5. 配置库文件:为了让系统能够正确识别OpenCV库文件,运行以下命令: ``` sudo nano /etc/ld.so.conf.d/opencv.conf ``` 在打开的文件中添加以下行: ``` /usr/local/lib ``` 保存并关闭文件,然后运行以下命令更新库配置: ``` sudo ldconfig ``` 现在,你的树莓派上已经成功配置了OpenCV。你可以通过编写代码来测试OpenCV是否正常工作。希望对你有帮助!如果还有其他问题,请随时提问。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值