• 1、opencv3.3以上版本安装 忽略,见博客 效果图 ...在OpenCV3.3版本发布中把DNN模块从扩展模块移到了OpenCV正式发布模块中,当前DNN模块最早来自Tiny-dnn,可以加载预先训练好的Caffe模型数据,OpenCV做了近...

    1、opencv3.3以上版本安装

    忽略,见博客
    

    效果图
    这里写图片描述
    在OpenCV3.3版本发布中把DNN模块从扩展模块移到了OpenCV正式发布模块中,当前DNN模块最早来自Tiny-dnn,可以加载预先训练好的Caffe模型数据,OpenCV做了近一步扩展支持所有主流的深度学习框架训练生成与导出模型数据加载,常见的有如下:
    Caffe
    TensorFlow
    Torch/PyTorch
    OpenCV中DNN模块已经支持与测试过这些常见的网络模块
    AlexNet
    GoogLeNet v1 (also referred to as Inception-5h)
    ResNet-34/50/…
    SqueezeNet v1.1
    VGG-based FCN (semantical segmentation network)
    ENet (lightweight semantical segmentation network)
    VGG-based SSD (object detection network)
    MobileNet-based SSD (light-weight object detection network)
    一:GoogleNet Caffe模型数据说明
    OpenCV通过支持加载这些预先训练好的模型,实现图像分类、对象检测、语义分割、风格迁移等功能。支持Android/iOS等移动端平台开发。下面我们就以OpenCV3.3 使用Caffe的GoogleNet数据模型为例,实现对图像常见分类,OpenCV3.3的DNN模块使用的模型支持1000种常见图像分类、googlenet深度学习网络模型是2014图像分类比赛的冠军、首先是下载相关的数据模型文件
    bvlc_googlenet.caffemodel
    bvlc_googlenet.prototxt
    其中prototxt是一个文本的JSON文件、一看就明白啦,另外一个文件二进制文件。文本文件只有你下载了OpenCV3.3解压缩之后就会在对应的目录发现。模型文件需要从以下地址下载即可: http://dl.caffe.berkeleyvision.org/bvlc_googlenet.caffemodel

    接下来我们用python调用Moblenet

    # USAGE
    # python deep_learning_object_detection.py --image images/example_01.jpg \
    #	--prototxt MobileNetSSD_deploy.prototxt.txt --model MobileNetSSD_deploy.caffemodel
    
    # import the necessary packages
    import numpy as np
    import argparse
    import cv2
    
    # construct the argument parse and parse the arguments
    ap = argparse.ArgumentParser()
    ap.add_argument("-i", "--image", required=True,
    	help="path to input image")
    ap.add_argument("-p", "--prototxt", required=True,
    	help="path to Caffe 'deploy' prototxt file")
    ap.add_argument("-m", "--model", required=True,
    	help="path to Caffe pre-trained model")
    ap.add_argument("-c", "--confidence", type=float, default=0.2,
    	help="minimum probability to filter weak detections")
    args = vars(ap.parse_args())
    
    # initialize the list of class labels MobileNet SSD was trained to
    # detect, then generate a set of bounding box colors for each class
    CLASSES = ["background", "aeroplane", "bicycle", "bird", "boat",
    	"bottle", "bus", "car", "cat", "chair", "cow", "diningtable",
    	"dog", "horse", "motorbike", "person", "pottedplant", "sheep",
    	"sofa", "train", "tvmonitor"]
    COLORS = np.random.uniform(0, 255, size=(len(CLASSES), 3))
    
    # load our serialized model from disk
    print("[INFO] loading model...")
    net = cv2.dnn.readNetFromCaffe(args["prototxt"], args["model"])
    
    # load the input image and construct an input blob for the image
    # by resizing to a fixed 300x300 pixels and then normalizing it
    # (note: normalization is done via the authors of the MobileNet SSD
    # implementation)
    image = cv2.imread(args["image"])
    (h, w) = image.shape[:2]
    blob = cv2.dnn.blobFromImage(cv2.resize(image, (300, 300)), 0.007843, (300, 300), 127.5)
    
    # pass the blob through the network and obtain the detections and
    # predictions
    print("[INFO] computing object detections...")
    net.setInput(blob)
    detections = net.forward()
    
    # loop over the detections
    for i in np.arange(0, detections.shape[2]):
    	# extract the confidence (i.e., probability) associated with the
    	# prediction
    	confidence = detections[0, 0, i, 2]
    
    	# filter out weak detections by ensuring the `confidence` is
    	# greater than the minimum confidence
    	if confidence > args["confidence"]:
    		# extract the index of the class label from the `detections`,
    		# then compute the (x, y)-coordinates of the bounding box for
    		# the object
    		idx = int(detections[0, 0, i, 1])
    		box = detections[0, 0, i, 3:7] * np.array([w, h, w, h])
    		(startX, startY, endX, endY) = box.astype("int")
    
    		# display the prediction
    		label = "{}: {:.2f}%".format(CLASSES[idx], confidence * 100)
    		print("[INFO] {}".format(label))
    		cv2.rectangle(image, (startX, startY), (endX, endY),
    			COLORS[idx], 2)
    		y = startY - 15 if startY - 15 > 15 else startY + 15
    		cv2.putText(image, label, (startX, y),
    			cv2.FONT_HERSHEY_SIMPLEX, 0.5, COLORS[idx], 2)
    
    # show the output image
    cv2.imshow("Output", image)
    cv2.waitKey(0)
    
    展开全文
  • OpenCV是一个基于BSD许可(开源)发行的跨平台计算机视觉库...它轻量级而且高效——由一系列 C 函数和少量 C++ 类构成,同时提供了Python、Ruby、MATLAB等语言的接口,实现了图像处理和计算机视觉方面的很多通用算法。

    1、树莓派上安装配置opencv
    我们从 opencv官网下载source文件,得到zip压缩包,这里推荐下载最新版本的Opencv,这里下载的是3.4.3版本,在安装前首先需要安装依赖包,在控制台输入:

    sudo apt-get install build-essential
    sudo apt-get install cmake git libgtk2.0-dev pkg-config libavcodec-dev libavformat-dev libswscale-dev
    sudo apt-get install python-dev python-numpy libtbb2 libtbb-dev libjpeg-dev libpng-dev libtiff-dev libjasper-dev libdc1394-22-dev\然后下载OpenCV3.2.0和OpenCV_contrib-3.2.0,下载需要等待一段时间
    

    之后输入:

    unzip opencv-3.4.3.zip #解压文件
    cd opencv-3.4.3 #进入文件夹
    mkdir build #创建编译文件夹
    cd build #进入
    camke .. 
    sudo make -j1
    

    -j 是使用多少线程进行编译,在Ubuntu虚拟机上由于我设设置的性能较好,可以使用-j8进行编译,也就是8线程,而在树莓派上则是使用的单线程编译,速度会慢很多,但是保证不会死机,一开始使用-j4时到99%时就死机了。如果-j后不加数字,则默认不限制线程编译

    在这里插入图片描述

    编译完成后输入:

    sudo make install #执行安装
    

    只要过一会就安装完成了。

    2、编写Opencv代码
    代码如下:

    #include <iostream>
    #include <opencv2/core/core.hpp> 
    #include <opencv2/highgui/highgui.hpp> 
    #include <opencv2/opencv.hpp> 
    using namespace std; 
    using namespace cv; 
    void fun2(Mat); 
    int main() 
    { 
    	Mat img = imread("orgin.png");//引入源图片文件 
    	if (img.empty()) 
    	{ 
    		return -1;//若没有图片文件,则为退出 
    	} 
    	fun2(img);//将源图片文件传入
    	fun2() namedWindow("orgin");//新建窗口 
    	imshow("orgin",img);//在orgin窗口下显示img 
    	namedWindow("new"); 
    	waitKey(0); 
    } 
    void fun2(Mat img) 
    { 
    	Mat element = getStructuringElement(MORPH_RECT, Size(15, 15));//图像处理的主要函数,函数的参数第一个为选择的样式,这里我选择的是MORPH_RECT样式,大小设置为15 
    	Mat dstimg; erode(img, dstimg, element);//将源文件进行处理,生成新的图像文件 
    	imshow("new", dstimg); 
    	imwrite("new.jpg", dstimg);//将处理后的新图像文件保存为new.jpg 
    }
    

    新建一个文件夹,之后将图像文件和cpp文件放入在同一文件夹内。

    3、运行代码
    在树莓派上运行Opencv的代码有点繁琐,首先需要安装cmake gui,使用图形界面会比较方便些,这里在终端直接输入:

    sudo apt-get cmake-gui
    

    进行安装。我们开始运行代码。在刚刚的文件夹里新建一个txt文件,这里推荐使用vim,当然也可以使用其他的文本编辑器,取名为CmakeLists.txt。CmakeLists的内容可以到Opencv的安装目录中找到Opencv官方的例子中直接复制过来就可以,不过需要改几个地方。

    # cmake needs this line
    cmake_minimum_required(VERSION 2.8)
    
    # Define project name
    project(opencv_example_project)
    
    # Find OpenCV, you may need to set OpenCV_DIR variable
    # to the absolute path to the directory containing OpenCVConfig.cmake file
    # via the command line or GUI
    find_package(OpenCV REQUIRED)
    
    # If the package has been found, several variables will
    # be set, you can find the full list with descriptions
    # in the OpenCVConfig.cmake file.
    # Print some message showing some of them
    message(STATUS "OpenCV library status:")
    message(STATUS "    version: ${OpenCV_VERSION}")
    message(STATUS "    libraries: ${OpenCV_LIBS}")
    message(STATUS "    include path: ${OpenCV_INCLUDE_DIRS}")
    
    if(CMAKE_VERSION VERSION_LESS "2.8.11")
      # Add OpenCV headers location to your include paths
      include_directories(${OpenCV_INCLUDE_DIRS})
    endif()
    
    # Declare the executable target built from your sources
    add_executable(opencv_example opencvtest.cpp)
    
    # Link your application with OpenCV libraries
    target_link_libraries(opencv_example ${OpenCV_LIBS})
    

    首先是为你的Opencv项目取名,当然如果不想改的话官方给的实例里已经给你取好了,其次就是将add_executable中的cpp文件改成自己写的代码的文件名,这样才可以知道编译的是哪个文件。

    接下来就是使用cmake-gui编译了。打开终端,输入:

    cmake-gui
    

    打开cmake-gui后看到界面,源代码处我们选择刚刚创建的文件夹,二进制文件一样也选择刚刚创建的文件夹,点击Add Entry,输入Opencv的安装位置,选择build文件夹,如图:
    在这里插入图片描述

    接着分别点击Configure和Generate,显示Configure Done和Generate Done就说明成功了。

    回到终端,cd进入刚刚的文件夹,输入:

    ls #查看生成的可执行文件的名称
    

    接着输入:

    ./opencv_example
    

    运行。运行结果如下:
    在这里插入图片描述
    个人博客:naohmurderer.tk(不定时分享小技术和音乐)

    展开全文
  • 跟着网上的教程用树莓派装了opencv 然后也运行了一些简单的图像处理 识别分割啥的但是感觉效果都好差。。本科生想出去参加竞赛来着。做机器人 拿树莓派做上位机再加上 跑opencv+cnn等等。。。 会不会arm根本忙不过来...
  • 树莓派_图像处理入门纪实(一) 先声明一点,凡是以纪实为文章标题的博客都是在强调:我只是向老板/领导/老师/同事/同学证明,我确实干活了。等把纪实的任务完成,会整理出一篇总结,把纪实中涉及的内容,用类似于...

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

    前面已经准备好的事情:
    - 设置好树莓派,升级相关软件
    - 安装好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端
  • 笔者最早接触Matlab是从2012版开始,对于算法处理,目前个人觉得单从计算方面来说,Matlab很不错。下面进入正文。 1 硬软件基础 Matlab 2019a 树莓派 3B+(matalb的镜像并不支持4B,但是并不...
  • 树莓派基于python循环处理树莓派拍摄图像集代码,本设计旨在改善车道偏离预警系统的整体性与造价性,以树莓派作为图像处理平台,实现了车道线的检测以及偏离预警功能。软件方面算法分为道路图像预处理、车道线的检测...
  • 树莓派,想要进行图像处理,但网上的很多教程都用opencv,opencv在树莓派上安装很麻烦,那怎样进行图像处理呢? 代码如下: from picamera.array import PiRGBArray from picamera import PiCamera import time #...
  • 树莓派图像处理数据延迟问题解决方法 很早之前(2018年左右)在做一个当时风靡一时"跳一跳"小游戏的自动运行小工具时(树莓派通过摄像头获取手机屏幕图像,再驱动舵机云台去点击手机屏幕),就有发现树莓派在做图像...
  • 图像的初步处理 彩色图片转灰度图 计算机对图片的处理,不同于生物的信息传递。 它的本质工作:对数据进行运算或处理 所以为了方便计算机处理,我们将图片进行简化(彩色图片转灰度) 引入numpy包 这里我用到了numpy...
  • 想做一个基于树莓派的智能视频监控系统,能够实现动作捕捉,运动检测,后期还想实现机器学习模型训练,想知道树莓派的硬件支持做这些吗?
  • opencv识别赛道黑线
  • Socket树莓派实时传输到PC上 我们把PC端作为我们的服务端,树莓派作为我们的客户端。 PC端 #!/usr/bin/python #-*-coding:utf-8 -*- import socket import cv2 import numpy address = ('',8080) # 设置地址与端口,...
  • OpenCV简介:opencv是一个开源的计算机视觉库,是英特尔公司资助的两大图像处理利器之一。它为图像处理、模式识别、三维重建、物体跟踪、机器学习和线性代数提供了各种各样的算法。
  • 知道目标物体的坐标,根据目标物体的坐标。和目标车库的坐标。两个坐标位置进行判断。 根据小车要匀速行驶。根据小车移动的时间*速度来判断小车位置 小车先找到小铁块,吸上以后,将车头方向指向车库方向 ...
  • 树莓派3B+平台搭载了Linux嵌入式系统,在Linux(Ubuntu 16.04)上安装python、OpenCV和tensorflow便可以组成一台mini主机用于数据处理。其硬件系统介绍如下: 博通BCM2837B0 SoC,集成四核ARM Cortex-A53(ARMv8)...
  • 使用Python和OpenCV实现树莓派/PC实时摄像头数据共享,主要分为服务器和客户端两部分。 服务器Demo如下: #服务器端 import socket import threading import struct import time import cv2 import numpy class...
  • 博主的树莓派安装的是Ubuntu16.04 mate ROS kinetic版本 笔记本为Ubuntu14.04 ROS indigo版本 首先我们要在树莓派上下载usb_cam的包 cd ~/catkin_ws/srcgit clone https://github.com/bosch-ros-pkg/usb_
1 2 3 4 5 ... 20
收藏数 2,723
精华内容 1,089