视频图像处理算法opencv在esp32及esp32s3上面的移植,也可以移植openmv
opencv在esp32及esp32s3上面的移植
- Opencv简介
OpenCV是一个基于Apache2.0许可(开源)发行的跨平台计算机视觉和机器学习软件库,可以运行在Linux、Windows、Android和Mac OS操作系统上,它轻量级而且高效——由一系列 C 函数和少量 C++ 类构成,同时提供了Python、Ruby、MATLAB等语言的接口,实现了图像处理和计算机视觉方面的很多通用算法。
这就使我们在esp32上实现OpenCV,进行图像处理以及计算机视觉成为了现实。
2、Esp32s3简介
ESP32-S3 和 ESP32 一样是一款同时支持WIFI和蓝牙功能,可以说是专为物联网而生的一款Soc,应用领域贯穿移动设备、可穿戴电子设备、智能家居等,在2,4GHz频带支持20MHz和40MHz频宽,和以往 ESP32 不一样的是,蓝牙除了支持BLE以外,目前支持 Bluetooth 5 和 Bluetooth mesh,更多的GPIO口使其能控制的外设达到更多,全速USB OTG支持直接通过USB协议与芯片进行通信。
最主要的是esp32s3具有双核的cpu。在图像处理方面有着先天的优势。
Core0通常使用作为wifi数据传输的处理。Core1进行视觉处理进程的运行。
3、移植硬件电路设计
为实现esp32s3的视频处理的内存需求,我们选用内置8M flash,外扩8M spram的模组;摄像头采用了ov2640作为输入;另外,为了调试方便,采用了240*240的LCD屏作为显示终端,可以实时看见图像处理结果。
以下是原理图:

整体系统效果如下:

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

此开发板可以在某宝上面搜索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进行通讯。这样就可以无线的方式传输图像处理结果。
相关文章:
视频图像处理算法opencv在esp32及esp32s3上面的移植,也可以移植openmv
opencv在esp32及esp32s3上面的移植 Opencv简介 OpenCV是一个基于Apache2.0许可(开源)发行的跨平台计算机视觉和机器学习软件库,可以运行在Linux、Windows、Android和Mac OS操作系统上,它轻量级而且高效——由一系列 C 函数和少量…...
2. postgresql并行扫描(1)——pg强制走并行扫描建表及参数配置
转载自:https://developer.aliyun.com/article/700370 1. 参数设置 1.1 postgresql.conf中修改 # 1、总的可开启的WORKER足够大 max_worker_processes 128# 2、所有会话同时执行并行计算的并行度足够大 max_parallel_workers64# 3、单个QUERY中并行计算NODE开…...
【C++】动态内存管理
【C】动态内存管理 new和delete用法内置类型自定义类型抛异常定位new 刨析new和delete的执行与实现逻辑功能执行顺序newdelete 功能实现operator new与operator delete malloc free与new delete的总结 在我们学习C之前 在C语言中常用的动态内存管理的函数为: mallo…...
MATLAB R2023a完美激活版(附激活补丁)
MATLAB R2023a是一款面向科学和工程领域的高级数学计算和数据分析软件,它为Mac用户提供了强大的工具和功能,用于解决各种复杂的数学和科学问题。以下是MATLAB R2023a Mac的一些主要特点和功能: 软件下载:MATLAB R2023a完美激活版 …...
垃圾回收 - 标记压缩算法
压缩算法是将标记清除算法与复制算法相结合的产物。 1、什么是标记压缩算法 标记压缩算法是由标记阶段和压缩阶段构成。 首先,这里的标记阶段和标记清除算法时提到的标记阶段完全一样。 接下来我们要搜索数次堆来进行压缩。压缩阶段通过数次搜索堆来重新填充活动对…...
Vue中过滤器如何使用?
过滤器是对即将显示的数据做进⼀步的筛选处理,然后进⾏显示,值得注意的是过滤器并没有改变原来 的数据,只是在原数据的基础上产⽣新的数据。过滤器分全局过滤器和本地过滤器(局部过滤器)。 目录 全局过滤器 本地过滤器…...
【爬虫】7.4. 字体反爬案例分析与爬取实战
字体反爬案例分析与爬取实战 文章目录 字体反爬案例分析与爬取实战1. 案例介绍2. 案例分析3. 爬取 本节来分析一个反爬案例,该案例将真实的数据隐藏到字体文件里,即使我们获取了页面源代码,也无法直接提取数据的真实值。 1. 案例介绍 案例网…...
Linux cat 的作用
Linux中的cat命令用于连接文件并打印到标准输出设备(通常是终端)。 它的主要作用有以下几点: 查看文件内容:cat命令可用于查看文本文件的内容,将文件的内容从第一行到最后一行打印到终端。 合并文件:cat命…...
Windows中的命令行提示符里的Start命令执行路径包含空格时的问题
转载:电脑知识收藏夹 Blog Archive Windows中的命令行提示符里的Start命令执行路径包含空格时的问题 当使用Windows 中的命令行提示符执行这段指令时(测试Start命令执行带空格的路径的程序或文件问题),第一行Start会成功执行,跳出记事本程…...
【基础计算机网络1】认识计算机网络体系结构,了解计算机网络的大致模型(上)
前言 今天,小编我也要进入计算机网络的整个内容,虽然这个计算机网络的内容在考研部分中占比比较小,有些人不把这一部分当成重点,这种想法是错误的。我觉得考研的这四个内容都是非常重要的,我们需要进行全力以赴的对待每…...
学校宿舍智能水电表管理系统:为节约资源保驾护航
随着科技的不断发展,越来越多的学校开始重视宿舍管理的智能化。其中,智能水电表管理系统作为一项重要的基础设施,已经逐渐被各大高校引入。本文将围绕学校宿舍智能水电表管理系统展开详细介绍,让我们一起来了解一下这个节约资源、…...
EasyFalsh移植使用方法
参考:https://blog.csdn.net/Mculover666/article/details/105510837 注意: 这里说的修改默认环境变量后修改环境变量版本号就自动重新写入到flash这句话是有问题的,要开启上面【#define EF_ENV_AUTO_UODATE】宏定义后才会实现该功能&#…...
函数栈帧(详解)
一、前言: 环境:X86Vs2013 我们C语言学习过程中是否遇到过如下问题或者疑惑: 1、局部变量是如何创建的? 2、为什么局部变量的值是随机值? 3、函数是怎么传参的?传参的顺序是怎样的? 4、形…...
【面试题总结1】-Static、Const、QT中基于TCP的通信服务器/客户端端操作
1、在C和C中static关键字的用法 在C语言和C中, ① static修饰未初始化的全局变量,结果默认为0 ; ② 当static修饰局部变量时,只是延长了这个变量的生命周期,并没有改变其作用域。 比如说,这个变量是在哪个函…...
镜像的基本命令(docker)
文章目录 前言一、docker命令介绍1、帮助命令2、显示镜像3、搜索镜像4、下载镜像5、删除镜像 总结 前言 本文主要介绍docker中与镜像相关的一些命令,是对狂神课程的一些总结,作为一个手册帮助博主和使用docker的同学们来查找和回忆。 实验环境…...
Liunx远程调试
1、Vscode中使用xdebug调试php 2、工具的下载 3、debug的配置 1、Vscode中使用xdebug调试php 1,在phpstudy中启用xdebug扩展 2,打开php.ini,修改配置 [Xdebug] zend_extensionD:/PHP/Extensions/php/php5.6.9nts/ext/php_xdebug.dll xdebug…...
Mac m1 安装rabbitmq+php-amqplib
rabbitmq 官方地址 https://www.rabbitmq.com mac 软件包 Downloading and Installing RabbitMQ — RabbitMQ 一.这里我选择 homebrew brew updatebrew install rabbitmq二.php代码 用composer 安装 10年软件开发经验,结交朋友! 分销商城系统开发,App商城开发 商务合作 s…...
如何实现软件的快速交付与部署?
一、低代码开发 微服务、平台化、云计算作为当前的IT技术热点,主要强调共享重用,它们促进了软件快速交付和部署。 但现实的痛点却是,大多数软件即使采用了微服务技术或者平台化思路,也难以做到通过软件共享重用来快速满足业务需求…...
c语言每日一练(14)【加强版】
前言:每日一练系列,每一期都包含5道选择题,2道编程题,博主会尽可能详细地进行讲解,令初学者也能听的清晰。博主有时会将一些难题综合成每日一练加强版,加强版是特殊的,它仅包含5道选择题&#x…...
操作系统的知识点总结
(一)操作系统的发展过程 一.前言 在 20 世纪 50 年代中期,出现了第一个简单的批处理 OS;60 年代中期开发出多道程序批处理系统:;不久又推出分时系统,与此同时,用于工业和武器控制的实时 OS 也相继问世。20 世纪 70 到 90 年代,是…...
BNO055传感器IIC地址冲突?手把手教你修改PS引脚配置
BNO055传感器I2C地址冲突解决方案:PS引脚配置实战指南 在机器人、无人机等需要多传感器协同工作的项目中,BNO055作为一款高性能9轴惯性测量单元(IMU)被广泛使用。但当多个BNO055传感器通过I2C总线连接时,默认地址冲突问题常常让开发者头疼不已…...
安防相机WDR功能实测:逆光场景下如何拍清车牌和人脸?
安防相机WDR功能实战解析:逆光场景下的车牌与人脸清晰拍摄指南 停车场出入口的监控画面中,一辆黑色轿车缓缓驶过,阳光从车尾方向直射镜头,车牌区域瞬间变成一片刺眼的白光——这是安防工程中最令人头疼的逆光场景。现代宽动态范围…...
关于2026年6月14日PMI认证考试的报名通知
尊敬的各位考生: 经PMI和中国国际人才交流基金会研究决定,中国大陆地区2026年第二期PMI认证考试6月14日举办。在基金会网站报名参加本次PMI认证考试的考生须认真阅读下文,知悉考试安排及注意事项,并遵守考试有关规定。 一、 报名注…...
Axure RP中文界面终极配置指南:从新手到专家的高效本地化方案
Axure RP中文界面终极配置指南:从新手到专家的高效本地化方案 【免费下载链接】axure-cn Chinese language file for Axure RP. Axure RP 简体中文语言包。支持 Axure 11、10、9。不定期更新。 项目地址: https://gitcode.com/gh_mirrors/ax/axure-cn Axure …...
ESP32-S3摄像头实战:按键触发拍照与SD卡自动存储方案
1. ESP32-S3摄像头项目核心价值与应用场景 当你手头有一块ESP32-S3开发板和摄像头模块时,最直接的冲动可能就是做个能拍照的小设备。但要把这个想法落地,需要解决三个关键问题:如何稳定触发拍摄?拍完的照片存哪里?怎么…...
深度学习模型过拟合的实战诊断与优化策略
1. 过拟合现象的诊断方法 第一次训练神经网络时,我盯着训练准确率冲到99%兴奋不已,结果测试集表现只有65%——这就是典型的过拟合现场。判断模型是否过拟合,就像医生看体检报告,需要多维度交叉验证。 最直观的方法是训练集与验证集…...
YOLOv8实战:从数据增强到模型部署的完整Pipeline(附代码)
YOLOv8实战:从数据增强到模型部署的完整Pipeline(附代码) 计算机视觉领域的目标检测技术近年来取得了显著进展,其中YOLO系列算法因其高效性和准确性备受关注。作为该系列的最新成员,YOLOv8在保持实时检测速度的同时&am…...
ai辅助开发:借助快马ai模型为直播应用添加弹幕情感分析与摘要生成功能
最近在开发一个直播应用时,发现弹幕互动是直播体验的重要组成部分,但海量弹幕中往往隐藏着观众的真实反馈和直播亮点。于是尝试用AI技术来增强直播应用的智能化功能,这里分享一下如何快速实现一个弹幕情感分析与摘要生成的工具页面。 项目构思…...
Mac 本地轻量级 K8s 开发环境实战指南
1. 为什么要在Mac上搭建轻量级K8s环境? 作为开发者,我们经常需要在本地测试Kubernetes应用,但传统方案要么太重(如完整K8s集群),要么太慢(如云环境)。在Mac上搭建轻量级K8s环境可以完…...
告别视图切换混乱:用快马平台和cc-switch提升前端开发效率
告别视图切换混乱:用快马平台和cc-switch提升前端开发效率 最近在开发一个需要多工作模式切换的项目时,遇到了视图管理混乱的问题。不同模式下的UI组件互相干扰,状态管理变得异常复杂。经过一番摸索,我发现cc-switch这个方案能很…...
