树莓派进行实时图像处理_树莓派做实时图像处理 - CSDN
  • OpenCV简介:opencv是一个... 其实安装与使用OpenCV库非常简单,平常做图像处理算法处理的时候大家经常习惯用MATLAB,虽然MATLAB具有强大的工具箱,但是无法达到实时的效果,这一点小编一点也不喜欢,在这篇文章中,

    OpenCV简介:opencv是一个开源的计算机视觉库,是英特尔公司资助的两大图像处理利器之一。它为图像处理、模式识别、三维重建、物体跟踪、机器学习和线性代数提供了各种各样的算法。(扩展阅读)
    其实安装与使用OpenCV库非常简单,平常做图像处理算法处理的时候大家经常习惯用MATLAB,虽然MATLAB具有强大的工具箱,但是无法达到实时的效果,这一点小编一点也不喜欢,在这篇文章中,我将使用Banana Pi M2U与树莓派来演示安装OpenCV库与运行使用OpenCV库编写的程序。小编的这两块板子均移植的是Linux操作系统。(什么?没学过linux? … 哎,那也不用慌张,这里只用到了一些基本的Linux指令,大家在有看不懂指令的时候可百度一下)。首先我们来看下环境配置,(等一下,小编,我也没学过ARM,没有硬件基础)其实在这里大家完全不用操心,我们根本没用到硬件知识,此时的香蕉派与树莓派只是相当于一个小电脑。
    (1)树莓派或者香蕉派(已经移植完linux操作系统,关于如何在电脑上linux系统移植及配置opencv ,小编会在后续的帖子中提到)
    (2)USB摄像头一个
    准备好硬件资源以后,我们即刻开始(注意,我这里是移植的是2.4.9版本,不同版本略有区别)
    下载与安装:
    在安装OpenCV库之前,我们需要更新一下软件源:

    1、   sudo apt-get update  
    

    然后开始安装OpenCV库:

        2、sudo apt-get install libcv-dev
    

    做到这一步的时候我们可以暂时去喝口水,耐心的等待一会儿,等到安装完成。我们就可以开始来写第一个程序了。
    其实使用OpenCV库,会使代码更容易阅读,更加整洁,根本不再需要重复造轮子!小编个人极其喜欢偷懒,经过简化之后,大概十余行即可打开摄像头。小编有个群193369905,里面分享的均是机器视觉的资料。

    #include <opencv2/highgui/highgui.hpp>
    #include <opencv2/core/core.hpp>
    using namespace cv;
    int main()
    {
    VideoCapture cap(0);           //打开摄像头
    // 如果要打开本地视频采用  VideoCapture cap("***.avi");
    if(!cap.isOpened())  return -1;     //检测一下摄像头是否打开
    Mat frame;  
    while(1){
    cap>>frame;        //读取当前帧
    // 此处可添加图像处理算法,对图像进行处理,当然了,我们可以不做任何操作,只打开一下摄像头
    imshow("Xiaorun OpenCV CAM", frame);    //显示一下
    if(waitKey(20) >=0) break;       // 等待按键,跳出循环
    }
    return 0;
    }
    

    就这样我们就编写完了一个打开摄像头的程序,将以上代码保存为xiaorun.cpp,并在shell敲一下它g++ -o xiaorun ./xiaorun.cpp -lopencv_core -lopencv_highgui
    编译完之后不出意外的话应该没有错误,我们会在当前目录下看到一个可执行文件,xiaorun,我们运行一下 ./ xiaorun
    dang dang dang 这时候屏幕就可以看到摄像头里的图像了,小编颜值不高,在这里就不挂出自拍了。
    上面的例子已经成功将摄像头的图像显示在屏幕上,不过这还不够炫酷~,完全不能让小编玩high.接下来我想在上述的空白处添加三行代码,以实现可实现实时的边缘检测

    #include <opencv2/highgui/highgui.hpp>
    #include <opencv2/core/core.hpp>
    #include <opencv2/imgproc/imgproc.hpp>
    using namespace cv;
    int main()
    {
    VideoCapture cap(0);//打开摄像头
    if(!cap.isOpened())return -1;
    Mat frame,edges;
    while(1){
    cap>>frame;//读取当前帧
    
    
    cvtColor(frame,edges,CV_BGR2GRAY);//把图像转换为灰度图像
    blur(edges,edges,Size(7,7));//模糊降噪
    Canny(edges,edges,3,9,3);//Canny 边缘检测
    
    
    imshow("Xiaorun OpenCV Canny", edges);
    if(waitKey(20) >=0) break;
    }
    return 0;
    }      
    

    同样 ,我们保存为xiaoruncanny.cpp ,编译一下 g++ -o xiaorun ./xiaorun.cpp -lopencv_core -lopencv_highgui -lopencv_imgproc
    当然木有错误了,只是稍稍加一个头文件和三行代码,OK,运行一下吧 ./ xiaorun
    机器视觉是人工智能正在快速发展的一个分支。简单说来,机器视觉就是用机器代替人眼来做测量和判断。OpenCV的更多例子大家可以在网上找到OpenCV可以应用在各种场合,例如跟踪小车,人脸识别等,小编在此仅抛砖引玉,此处只有一个基本框架,大家可以参考,自行编写算法,玩的更High感兴趣的可加群193369905,小编承接各种AI小项目开发 利用这个做的水下机器人
    原创不易,欢迎赞赏
    在这里插入图片描述

    展开全文
  • 树莓派_图像处理入门纪实(一) 先声明一点,凡是以纪实为文章标题的博客都是在强调:我只是向老板/领导/老师/同事/同学证明,我确实干活了。等把纪实的任务完成,会整理出一篇总结,把纪实中涉及的内容,用类似于...

    树莓派_图像处理入门纪实(一)
    先声明一点,凡是以纪实为文章标题的博客都是在强调:我只是向老板/领导/老师/同事/同学证明,我确实干活了。等把纪实的任务完成,会整理出一篇总结,把纪实中涉及的内容,用类似于教程的方法写下来。

    前面已经准备好的事情:
    - 设置好树莓派,升级相关软件
    - 安装好OpenCV的相关库,我安装的是OpenCV3.1.0
    - 确定摄像头和树莓派是兼容的

    在OpenCV官网上找到了一些比较有用的信息。OpenCV使用视频,比较方便的方法是用VideoCapture类来实现。官网中给出了调用一个摄像头的例子:

    #include "opencv2/opencv.hpp"
    using namespace cv;
    int main(int, char**)
    {
        VideoCapture cap(0); // 使用默认摄像头
        if(!cap.isOpened())  // 检查摄像头是否成功打开
            return -1;
        Mat edges;
        namedWindow("edges",1); //建立一个窗口
        for(;;)
        {
            Mat frame;
            cap >> frame; // 获得摄像头的一帧
            //下面三句代码是利用canny算子进行边缘检测
            cvtColor(frame, edges, COLOR_BGR2GRAY);
            GaussianBlur(edges, edges, Size(7,7), 1.5, 1.5);
            Canny(edges, edges, 0, 30, 3);
            imshow("edges", edges);  //在名字为“edges”的窗口显示
            if(waitKey(30) >= 0) break;
        }
        // the camera will be deinitialized automatically in VideoCapture destructor
        return 0;
    }

    代码的运行效果图

    从官网上可以看出,VideoCapture类由一下成员函数可以调用:

    //filename表示要打开的文件名,index表示要打开的摄像头编号(实验了一下,树莓派基本是从0开始编号的)
            VideoCapture ()
            VideoCapture (const String &filename)
            VideoCapture (const String &filename, int apiPreference)
            VideoCapture (int index)
    virtual     ~VideoCapture ()
    virtual double  get (int propId)
    virtual bool    grab ()
    virtual bool    isOpened () const
    virtual bool    open (const String &filename)
    virtual bool    open (int index)
    virtual bool    open (const String &filename, int apiPreference)
    virtual VideoCapture &  operator>> (Mat &image)
    virtual VideoCapture &  operator>> (UMat &image)
    virtual bool    read (OutputArray image)
    virtual void    release ()
    virtual bool    retrieve (OutputArray image, int flag=0)
    virtual bool    set (int propId, double value)

    作为一个比较用于尝试的人,我还真的把上面的代码改造成双摄像头的,可惜失败了,内存消耗大的诡异。系统已经开始提示内存不足了。
    目前发现的几个还没解决的问题:
    - 无法成功使用双摄像头
    - 图片颜色显示不正确
    - 图片头尾位置不正确

    展开全文
  • 想做一个基于树莓派的智能视频监控系统,能够实现动作捕捉,运动检测,后期还想实现机器学习模型训练,想知道树莓派的硬件支持做这些吗?
  • 树莓派-图像处理Python

    2020-04-05 14:26:09
    树莓派进行图像处理-Python 代码: import cv2 #导入opencv库 import numpy as np #… #读取一张图片,地址不能带中文 ‘’’ 第二个参数,取值可为: cv2.IMREAD_COLOR:默认参数,读入一副彩色图片,忽略alpha...

    树莓派中进行图像处理-Python

    代码:

    import cv2 #导入opencv库
    import numpy as np
    #…
    #读取一张图片,地址不能带中文
    ‘’’
    第二个参数,取值可为:
    cv2.IMREAD_COLOR:默认参数,读入一副彩色图片,忽略alpha通道
    cv2.IMREAD_GRAYSCALE:读入灰度图片
    cv2.IMREAD_UNCHANGED:读入完整图片,包括alpha通道(png有,jpg无)
    ‘’’
    imgviewx=cv2.imread(“ha.png”,cv2.IMREAD_COLOR)
    #…
    #获取图片信息
    #一个像素有三个通道,BGR
    print(imgviewx.shape)#输出:(1080, 1920, 3) 高像素,宽像素,通道数
    print(imgviewx.size)# 120000 总通道数=高* 宽* 通道数
    print(imgviewx.dtype)# uint8 3个通道每个通道占的位数(8位,一个字节)
    #print(imgviewx) #输出效果视乎与下条相同
    #print(np.array(imgviewx)) #输出每个像素点的参数( B , G , R )
    #获取图片 B G R 各均值, #(204.46305102040816, 208.50832244897958, 217.29540408163263, 0.0) ,红色部分最多
    print(cv2.mean(imgviewx))
    #获取方差,也会打印均值,可用均值方差都为零判断图片无效
    #print(cv2.meanStdDev(imgviewx))
    #…
    #图片处理
    #备份图片
    imgviewx1=imgviewx.copy()
    #均值模糊,主要用于去除图片噪点
    #读取图片并实现图片的模糊效果,参数:(读取图片,(X轴方向模糊,Y轴方向模糊))
    #imgviewx=cv2.blur(imgviewx,(5,5))
    #中值模糊,主要用于去除椒盐(烧烤配料)噪点
    #参数:(图片信息,模糊值)
    #imgviewx=cv2.medianBlur(imgviewx,9)
    #普通高斯模糊
    #参数:(图片信息,参数1,参数2)参数1和参数2只能设置一个
    #imgviewx=cv2.GaussianBlur(imgviewx,(0,0),1)
    #保留边缘(像素差),高斯模糊
    #参数(图片信息,0,要用怎样的方式(越大则越细),空间复杂度(越大越复杂))
    imgviewx=cv2.bilateralFilter(imgviewx,0,50,6)
    #美颜,美白效果valuex值越大越白
    #valuex=50;
    #imgviewx=cv2.bilateralFilter(cv2.imread(“imgx/zcy.jpg”),valuex,valuex * 2,valuex / 2)
    #对比度和亮度调整
    #duix=0.5 #对比度
    #lightx=0 #亮度
    #imgviewx=cv2.addWeighted(imgviewx,duix,np.zeros(imgviewx.shape,imgviewx.dtype),1-duix,lightx)
    #显示文字
    #参数:图像,文字内容, 坐标( x , y ) ,字体,大小,颜色( B , G ,R ),字体厚度
    #颜色值为0-255
    font = cv2.FONT_HERSHEY_SIMPLEX # 定义字体
    imgviewx = cv2.putText(imgviewx,“hhh”,(10, 50), font, 1.2, (0, 0, 255), 5)
    #像素取反
    #imgviewx=cv2.bitwise_not(imgviewx)
    #遍历图片,效率低,不推荐使用
    def xgtp():
    global imgviewx
    gx,kx,tx=imgviewx.shape#得到像素高度,像素宽度,通道数
    for g in range(0,gx):
    for k in range(0,kx): #这里得到的是每个像素点,每个点由RGB三色构成
    if(k>0 and k<100):
    imgviewx[g,k,0]=0 # B
    imgviewx[g,k,1]=255 # G
    imgviewx[g,k,2]=255 # R
    else:
    imgviewx[g, k, 0] = imgviewx[g, k, 0] #获取到原来的值
    imgviewx[g, k, 1] = imgviewx[g, k, 1]
    imgviewx[g, k, 2] = imgviewx[g, k, 2]
    #创建一个图形,使用np,所以效率高
    def cjtx():
    # 初始化像素点值全为0 (rgb都为零,所以是黑色)
    #参数:([高,宽,通道数],每个通道占的位数(一个字节))
    imgx=np.zeros([400,600,3],np.uint8)
    #初始化像素点值为全为1
    #imgx[110:130,50:70,2]表示一个范围:[高度起始点:高度结束点,宽度起始点:宽度结束点,哪个通道],起始点均以左上角
    #imgx[:,:,0]=np.ones([400,600],np.uint8)*255 #最终结果为第一个通道(B)全为255,所以是蓝色
    imgx[110:130,50:70,1]=np.ones([20,20],np.uint8)255
    cv2.imshow(“第二个图形窗口”,imgx)
    #图片区域处理
    def pictureArea():
    global imgviewx
    #得到截图
    areax=imgviewx[110:529,778:1200]
    #将图片由RGB(3通道)转换为灰度(2通道)
    areax=cv2.cvtColor(areax,cv2.COLOR_BGR2GRAY)
    #将图片有2通道还原成3通道,但色彩不能还原
    areax2=cv2.cvtColor(areax,cv2.COLOR_GRAY2RGB)
    #处理后的区域写到原图上
    imgviewx[110:529, 778:1200]=areax2
    #显示截图
    cv2.imshow(“area”,areax)
    #泛洪填充,相似像素填充
    def fill_color():
    global imgviewx
    h,w,t=imgviewx.shape
    #必要参数
    maskx=np.zeros([h+2,w+2],np.uint8)
    #参数接收:(图片信息,必要参数,参考点位置坐标,填充的颜色,查找范围:最低像素(参考减所写),查找范围:最高像素(参考加所写),全部填充) cv2.floodFill(imgviewx,maskx,(100,100),(0,255,0),(100,100,100),(50,50,50),cv2.FLOODFILL_FIXED_RANGE)
    #通道分离与合并
    def tongdao():
    global imgviewx
    b,g,r=cv2.split(imgviewx)#通道分离
    cv2.imshow(“bb”,b)#通道图单独显示
    cv2.imshow(“gg”,g)
    cv2.imshow(“rr”,r)
    imgviewx[:,:,1]=135 #改变单个通道(0,1,2 => B,G,R)
    cv2.imshow("chang red ",imgviewx)
    imgviewx=cv2.merge([b,g,r])#合并通道
    #像素运算
    def pixel_operation():
    #读入两张大小和通道相同的图片
    img1=cv2.imread(“imgx/img1.jpg”)
    img2=cv2.imread(“imgx/img2.jpg”)
    print(img1.shape, “=====”, img2.shape)
    # 创建一个大小可调整的窗口
    cv2.namedWindow(“operation”, cv2.WINDOW_NORMAL)
    cv2.imshow(“img111”, img1)
    cv2.imshow(“img222”,img2)
    #处理图片
    #像素点相加,如0(黑色),255(白色),0+255=255(白色),超过255还是白色
    #imgoperation=cv2.add(img1,img2)
    #像素相减,如0(黑色),255(白色),0-255=-255=0(黑色)
    #imgoperation=cv2.subtract(img1,img2)
    #像素相乘,255(白色),0/255=0(黑色)
    #imgoperation=cv2.divide(img1,img2)
    #像素相乘,255(白色),0
    255=0(黑色)
    #imgoperation=cv2.multiply(img2,img1)
    #像素与,二进制与,如0与255为00000000&11111111=00000000
    imgoperation=cv2.bitwise_and(img1,img2)
    #像素或
    imgoperation=cv2.bitwise_or(img1,img2)
    #显示处理后的图片
    cv2.imshow(“operation”, imgoperation)
    #…
    #视频处理,视频无声音
    def vediox():
    ved=cv2.VideoCapture(“imgx/vv.mp4”)#打开视频
    while True:
    ret,tux=ved.read()
    if ret== False:#判断视频是否播放完毕
    break
    else:
    cv2.imshow(“wideo1111”,tux)#每帧显示
    hsv=cv2.cvtColor(tux,cv2.COLOR_BGR2HSV)#转换成HSV图片格式,对颜色敏感
    lowx=np.array([37,43,46])#表格在后面给出
    uppx=np.array([77,255,255])
    # 播放此输出的目标是白色
    tux2=cv2.inRange(hsv,lowx,uppx)#利用低指和高指匹配延时,所匹配的是绿色
    #播放此输出的目标是原色
    tux3 = cv2.bitwise_and(tux,tux, mask=tux2)

            cv2.imshow("video222",tux3)
    
            if 27==cv2.waitKey(20):#按键退出播放
                break
    

    #…
    #创建一个窗口,中文显示会出乱码,第一个参数为窗口唯一标识字符串
    #窗口大小可调整,默认参数为c v2.WINDOW_AUTOSIZE 根据图像大小自动创建大小
    #可建多个
    cv2.namedWindow(“hhh”,cv2.WINDOW_NORMAL)
    #…
    #创建鼠标点击事件回调函数,(事件,x轴位置,y轴位置,标记,属性)
    def drawxxx(event,x,y,flags,param):
    if eventcv2.EVENT_LBUTTONDOWN:
    print(“鼠标按下”,x,y)
    #elif event
    cv2.EVENT_MOUSEMOVE:
    # print(“鼠标滑动”)
    elif eventcv2.EVENT_LBUTTONUP:
    print(“鼠标抬起”)
    #注册鼠标监听事件(窗口,回调函数)
    cv2.setMouseCallback("hhh,drawxxx)
    #…
    t1=cv2.getTickCount()#利用cpu时间…
    #xgtp()#调用图片像素遍历函数
    #cjtx()#调用创建图形函数
    #vediox()#调用视频处理函数
    #tongdao()#通道处理
    #pixel_operation()#像素点的加减乘除等处理
    #pictureArea()#图片区域处理
    #fill_color()#泛洪填充,相似像素填充
    t2=cv2.getTickCount()
    timesx=(t2-t1)/cv2.getTickFrequency()
    print(“花费时间:%s 毫秒”%(timesx*1000))
    #显示图片,参数:(窗口唯一标识字符串,imread读入的图像)
    #可以不基于窗口,可建多个
    cv2.imshow(“hhh”,imgviewx)
    #…
    #将图片保存,写入到文件
    cv2.imwrite(“2.jpg”,imgviewx)
    #…
    #窗口退出
    #窗口等待任意键盘按键输入,0为一直等待,其他数字为毫秒数
    #等待时间到则返回-1,如有键盘按键按下则返回按键的ASCII码
    #可使用print(cv2.waitKey(0))获取该按键值
    keyx=cv2.waitKey(0)
    print(keyx)
    if keyx
    27:
    print(“你按下了键盘的:ESC键”
    #…
    #销毁窗口,退出程序
    cv2.destroyAllWindows()

    运行结果:

    该代码的功能是处理了每个像素,将图片美化和显示每个点的坐标值
    实验结果:图片更加清晰,美化了原始图片,同时图片左上方显示“hhhh”
    在这里插入图片描述

    展开全文
  • 2、插卡安装树莓派 3、进入linux系统更改root密码 sudo passwd root 4、开启ssh服务 树莓派登录raspi-config开启ssh服务 5、远程桌面: 在树莓派命令行下输入如下命令 安装tightvncserver sudo apt-get ...

    使用opencv对图像处理

    树莓派相关库安装:

    sudo apt-get update
    sudo apt-get install libjpeg-dev
    sudo apt-get install libatlas-base-dev
    sudo apt-get install libjpeg-dev
    sudo apt-get install libtiff5-dev
    sudo apt-get install libpng12-dev
    sudo apt-get install libqtgui4 libqt4-test
    sudo apt-get install libjasper-dev
    

    OpenCV模块pip安装

    sudo pip3 install opencv-python
    

    • 测试
    在终端输入 :python3
    然后 :import cv2
    如果安装成功,则import不会有问题
    下面就可以输出OpenCv的版本号
    使用 :print(cv2.version)
    退出python用: exit()

    import cv2
    import numpy as np
    
    cap = cv2.VideoCapture(0)
    while(1):
        # get a frame
        ret, frame = cap.read()
        # show a frame
        cv2.imshow("capture", frame)
           
        if cv2.waitKey(1) & 0xFF == ord('q'):
        #退出并拍照
            cv2.imwrite("takephoto2.jpg", frame)
            print("take Photo Ok")
            break
    cap.release()
    cv2.destroyAllWindows()
    

    树莓派实现·本地抓拍保存到picam里面

    展开全文
  • 树莓派通过官方摄像头进行运动检测,当检测到有动作发生,将该帧图像通过tcp协议实时传输到pc端
  • 树莓派图像处理数据延迟问题解决方法 很早之前(2018年左右)在做一个当时风靡一时"跳一跳"小游戏的自动运行小工具时(树莓派通过摄像头获取手机屏幕图像,再驱动舵机云台去点击手机屏幕),就有发现树莓派在做图像...
  • 1、opencv3.3以上版本安装 忽略,见博客 效果图 ...在OpenCV3.3版本发布中把DNN模块从扩展模块移到了OpenCV正式发布模块中,当前DNN模块最早来自Tiny-dnn,可以加载预先训练好的Caffe模型数据,OpenCV做了近...
  • 树莓派,想要进行图像处理,但网上的很多教程都用opencv,opencv在树莓派上安装很麻烦,那怎样进行图像处理呢? 代码如下: from picamera.array import PiRGBArray from picamera import PiCamera import time #...
  • OpenCV是一个基于BSD许可(开源)发行的跨平台计算机视觉库...它轻量级而且高效——由一系列 C 函数和少量 C++ 类构成,同时提供了Python、Ruby、MATLAB等语言的接口,实现了图像处理和计算机视觉方面的很多通用算法。
  • OpenCV简介:opencv是一个开源的计算机视觉库,是英特尔公司资助的两大图像处理利器之一。它为图像处理、模式识别、三维重建、物体跟踪、机器学习和线性代数提供了各种各样的算法。
  • 概述 本文实现了一种基于树莓派+python3+opencv3方法实现实时网络视频监控(局域网内)。...客户端通过网络实时查看树莓派的摄像头连接的视频图像。 硬件型号 树莓派3B+,USB摄像头,笔记本电脑...
  • 图像的初步处理 彩色图片转灰度图 计算机对图片的处理,不同于生物的信息传递。 它的本质工作:对数据进行运算或处理 所以为了方便计算机处理,我们将图片进行简化(彩色图片转灰度) 引入numpy包 这里我用到了numpy...
  • 跟着网上的教程用树莓派装了opencv 然后也运行了一些简单的图像处理 识别分割啥的但是感觉效果都好差。。本科生想出去参加竞赛来着。做机器人 拿树莓派做上位机再加上 跑opencv+cnn等等。。。 会不会arm根本忙不过来...
  • 树莓派基于python循环处理树莓派拍摄图像集代码,本设计旨在改善车道偏离预警系统的整体性与造价性,以树莓派作为图像处理平台,实现了车道线的检测以及偏离预警功能。软件方面算法分为道路图像预处理、车道线的检测...
  • 客户可通过关注该公众号,获取树莓派处的实时图像,湿度及温度信息 系统架构如下: 树莓派端接线如下: 软件结构如下: 软件部分可分为以下几个部分进行实现: DTH11驱动模块的设计。DHT11数字温湿度...
  • opencv识别赛道黑线
  • 机器对图像处理 不同于win系统下的操作,我在linux系统下,将即将被电脑读入,并进行一系列操作的图片,单独建立一个文件夹。 顺便说一下 linux创建文件夹命令。 //打开桌面 cd Desktop // 创建一个名为Project的...
  • 基于树莓派3B+的实时多线程人脸haar检测算法。 使用opencv+python编写 操作系统:ubuntu mate 18.04
  • Socket树莓派实时传输到PC上 我们把PC端作为我们的服务端,树莓派作为我们的客户端。 PC端 #!/usr/bin/python #-*-coding:utf-8 -*- import socket import cv2 import numpy address = ('',8080) # 设置地址与端口,...
1 2 3 4 5 ... 20
收藏数 2,712
精华内容 1,084
关键字:

树莓派进行实时图像处理