视频图像处理算法opencv在esp32及esp32s3上面的移植,也可以移植openmv

news/2024/7/21 5:06:24 标签: 图像处理, 算法, 人工智能

opencvesp32esp32s3上面的移植

  1. Opencv简介

      OpenCV是一个基于Apache2.0许可(开源)发行的跨平台计算机视觉和机器学习软件库,可以运行在LinuxWindowsAndroidMac OS操作系统上,它轻量级而且高效——由一系列 C 函数和少量 C++ 类构成,同时提供了PythonRubyMATLAB等语言的接口,实现了图像处理和计算机视觉方面的很多通用算法

      这就使我们在esp32上实现OpenCV,进行图像处理以及计算机视觉成为了现实。

     2、Esp32s3简介

      ESP32-S3 ESP32 一样是一款同时支持WIFI和蓝牙功能,可以说是专为物联网而生的一款Soc,应用领域贯穿移动设备、可穿戴电子设备、智能家居等,在2,4GHz频带支持20MHz40MHz频宽,和以往 ESP32 不一样的是,蓝牙除了支持BLE以外,目前支持 Bluetooth 5 Bluetooth mesh,更多的GPIO口使其能控制的外设达到更多,全速USB OTG支持直接通过USB协议与芯片进行通信。

     最主要的是esp32s3具有双核的cpu。在图像处理方面有着先天的优势。

      Core0通常使用作为wifi数据传输的处理。Core1进行视觉处理进程的运行。

     3、移植硬件电路设计

      为实现esp32s3的视频处理的内存需求,我们选用内置8M flash,外扩8M spram的模组;摄像头采用了ov2640作为输入;另外,为了调试方便,采用了240*240LCD屏作为显示终端,可以实时看见图像处理结果。

      以下是原理图:

      整体系统效果如下:

      反面的摄像头以及补光灯:

     此开发板可以在某宝上面搜索esp32s3  opencv

   4、Demo软件效果

       一、Opencv中的目标拾取代码。通常,我们在图像处理的时候,需要对采集照片进行灰度处理,然后,对照片进行二值化处理。进而进行目标拾取。

      使用的函数为:

     Mat inputImage(fb->height, fb->width, CV_8UC2, fb->buf);      // rgb565 is 2 channels of 8-bit unsigned

    cvtColor(inputImage, inputImage, COLOR_BGR5652GRAY);

     threshold(inputImage, inputImage, 128, 255, THRESH_BINARY);

    轻松就会得到目标物体,效果如下:

      开发板中提供demo的源代码,可以使用esp-idf进行编译运行。

     二、如果进行颜色拾取的话,可以使用以下函数

          if (s->pixformat == PIXFORMAT_JPEG)

            {

                TFT_jpg_image(CENTER, CENTER, 0, -1, NULL, fb->buf, fb->len);

                esp_camera_fb_return(fb);

                fb = NULL;

            }

            else

            {   

                 Mat inputImage(fb->height, fb->width, CV_8UC2, fb->buf);                cvtColor(inputImage, inputImage, COLOR_BGR5652BGR);

                 int pos_x = fb->width / 2;

                 int pos_y = fb->height / 2;

                 int blue = inputImage.at<Vec3b>(pos_x, pos_y)[0];  // getting the pixel values//

                 int green = inputImage.at<Vec3b>(pos_x, pos_y)[1]; // getting the pixel values//

                int red = inputImage.at<Vec3b>(pos_x, pos_y)[2];   // getting the pixel values//

                updateColorCode(red, green, blue);

                std::vector<Mat> bgr_planes;

                split(inputImage, bgr_planes);

                float range[] = {0, 240};

                const float *histRange = {range};

                bool uniform = true;

                bool accumulate = false;

                Mat b_hist, g_hist, r_hist;

                calcHist(&bgr_planes[0], 1, 0, Mat(), b_hist, 1, &histSize,

                         &histRange, uniform, accumulate);

                calcHist(&bgr_planes[1], 1, 0, Mat(), g_hist, 1, &histSize,

                         &histRange, uniform, accumulate);

                calcHist(&bgr_planes[2], 1, 0, Mat(), r_hist, 1, &histSize,

                         &histRange, uniform, accumulate);

                drawHistogram(b_hist, g_hist, r_hist, inputImage);

                drawCenterMark(inputImage);

                updateCameraImage(inputImage);

            }

           esp_camera_fb_return(fb);

    5、结语 

       在视觉处理OpenCV有着开源的优势,小而精悍;esp32s3具有双核的CPU可以使用wifi进行通讯。这样就可以无线的方式传输图像处理结果。


http://www.niftyadmin.cn/n/4996691.html

相关文章

我的Vim学习笔记(不定期更新)

2023年9月3日&#xff0c;周日上午 学到了啥就写啥&#xff0c;不定期更新 目录 字体 文件 标签页 分屏 调用系统命令 字体 设置字体大小 :set guifont字体:h字体大小 例如&#xff0c;:set guifontMonospace:h20 查询当前使用的字体和字体大小 :set guifont? 查看…

redis实战-实现优惠券秒杀解决超卖问题

全局唯一ID 唯一ID的必要性 每个店铺都可以发布优惠券&#xff1a; 当用户抢购时&#xff0c;就会生成订单并保存到tb_voucher_order这张表中&#xff0c;而订单表如果使用数据库自增ID就存在一些问题&#xff1a; id的规律性太明显&#xff0c;容易被用户根据id的间隔来猜测…

2023 AZ900备考

文章目录 如何学习最近准备考AZ900考试&#xff0c;找了一圈文档&#xff0c;结果发现看那么多文档&#xff0c;不如直接看官方的教程https://learn.microsoft.com/zh-cn/certifications/exams/az-900/ &#xff0c;简单直接&#xff0c;突然想到纳瓦尔宝典中提到多花时间进行思…

LNMP架构:搭建Discuz论坛

文章目录 1. 编译安装Nginx1.1 前置准备1.2 编译安装1.3 添加nginx系统服务 2.编译安装MySql2.1 前置准备2.2 编译安装2.3 修改mysql 配置文件2.4 设置路径环境变量2.5 初始化数据库2.6 添加musql系统服务2.7 修改MySql登录密码 3. 编译安装PHP3.1 前置准备3.2 编译安装3.3 复制…

什么是用户界面? 优漫动游

什么是用户界面&#xff1f; 用户界面(UI&#xff0c;UserInterface)也称人机界面&#xff0c;是人机交互、操作逻辑和界面表现的整体设计。每一种设计都有其对应的职业角色&#xff0c;其中&#xff0c;人机交互的设计人员叫做用户研究工程师&#xff0c;操作逻辑设计人员叫…

Matlab(画图初阶)

目录 1.plot()函数 2. hold(添加新绘图是否保留旧绘图) 3. Plot Style 3.1 线型 3.2 标记 3.3 颜色 ​编辑 4. legend() 5.X 、Y and Title&#xff1f; 6. Text()和annotation() 7.line(创建基本线条) 7.1 基本语法 7.2 指定线条属性 7.3 更改线条属性 8.图像属性 8.1 …

TensorRT来加速YOLO v5推理与检测

TensorRT来加速YOLO v5推理与检测 文章目录 TensorRT来加速YOLO v5推理与检测TensorRT简介一、TensorRT安装1. 电脑基础环境2. 查看 cuda 版本3. 安装TensorRT4. 验证TensorRT 二、YOLO v5模型导出函数1.onnx 模型导出&#xff08;def export_onnx&#xff08;&#xff09;函数…

一文速学-让神经网络不再神秘,一天速学神经网络基础(五)-最优化

前言 思索了很久到底要不要出深度学习内容&#xff0c;毕竟在数学建模专栏里边的机器学习内容还有一大半算法没有更新&#xff0c;很多坑都没有填满&#xff0c;而且现在深度学习的文章和学习课程都十分的多&#xff0c;我考虑了很久决定还是得出神经网络系列文章&#xff0c;…