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

opencv esp32 esp32s3 上面的移植

  1. 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进行通讯。这样就可以无线的方式传输图像处理结果。

相关推荐
m0_6501082416 小时前
【论文精读】迈向更好的指标:从T2VScore看文本到视频生成的新评测范式
人工智能·论文精读·评估指标·文本到视频生成·t2vscore·tvge数据集·视频质量评估
多喝开水少熬夜16 小时前
损失函数系列:focal-Dice-vgg
图像处理·python·算法·大模型·llm
算家计算16 小时前
一张白纸,无限画布:SkyReels刚刚重新定义了AI视频创作
人工智能·aigc·资讯
Kandiy1802539818716 小时前
PHY6252国产蓝牙低成本透传芯片BLE5.2智能灯控智能家居
人工智能·物联网·智能家居·射频工程
立志成为大牛的小牛16 小时前
数据结构——三十七、关键路径(王道408)
数据结构·笔记·程序人生·考研·算法
机器之心16 小时前
字节Seed团队发布循环语言模型Ouro,在预训练阶段直接「思考」,Bengio组参与
人工智能·openai
ytttr87317 小时前
基于MATLAB的Relief算法特征权重选择实现
算法
新智元17 小时前
AI 教父 Hinton 末日警告!你必须失业,AI 万亿泡沫豪赌才能「赢」
人工智能·openai
新智元17 小时前
CUDA 再见了!寒武纪亮出软件全家桶
人工智能·openai
oe101917 小时前
好文与笔记分享 A Survey of Context Engineering for Large Language Models(下)
人工智能·笔记·语言模型·agent