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

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屏作为显示终端,可以实时看见图像处理结果。

      以下是原理图:

视频图像处理算法opencv在esp32及esp32s3上面的移植,也可以移植openmv_第1张图片

      整体系统效果如下:

视频图像处理算法opencv在esp32及esp32s3上面的移植,也可以移植openmv_第2张图片

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

视频图像处理算法opencv在esp32及esp32s3上面的移植,也可以移植openmv_第3张图片

     此开发板可以在某宝上面搜索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);

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

视频图像处理算法opencv在esp32及esp32s3上面的移植,也可以移植openmv_第4张图片

      开发板中提供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(pos_x, pos_y)[0];  // getting the pixel values//

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

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

                updateColorCode(red, green, blue);

                std::vector 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);

视频图像处理算法opencv在esp32及esp32s3上面的移植,也可以移植openmv_第5张图片

    5、结语 

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

你可能感兴趣的:(图像处理,算法,人工智能,opencv)