opencv在esp32及esp32s3上面的移植
- Opencv簡介
? ? ? OpenCV是一個基于Apache2.0許可(開源)發(fā)行的跨平臺計算機(jī)視覺和機(jī)器學(xué)習(xí)軟件庫,可以運(yùn)行在Linux、Windows、Android和Mac OS操作系統(tǒng)上,它輕量級而且高效——由一系列 C 函數(shù)和少量 C++ 類構(gòu)成,同時提供了Python、Ruby、MATLAB等語言的接口,實現(xiàn)了圖像處理和計算機(jī)視覺方面的很多通用算法。
? ? ? 這就使我們在esp32上實現(xiàn)OpenCV,進(jìn)行圖像處理以及計算機(jī)視覺成為了現(xiàn)實。
? ? ?2、Esp32s3簡介
? ? ? ESP32-S3 和 ESP32 一樣是一款同時支持WIFI和藍(lán)牙功能,可以說是專為物聯(lián)網(wǎng)而生的一款Soc,應(yīng)用領(lǐng)域貫穿移動設(shè)備、可穿戴電子設(shè)備、智能家居等,在2,4GHz頻帶支持20MHz和40MHz頻寬,和以往 ESP32 不一樣的是,藍(lán)牙除了支持BLE以外,目前支持 Bluetooth 5 和 Bluetooth mesh,更多的GPIO口使其能控制的外設(shè)達(dá)到更多,全速USB OTG支持直接通過USB協(xié)議與芯片進(jìn)行通信。
? ? ?最主要的是esp32s3具有雙核的cpu。在圖像處理方面有著先天的優(yōu)勢。
? ? ? Core0通常使用作為wifi數(shù)據(jù)傳輸?shù)奶幚怼?/span>Core1進(jìn)行視覺處理進(jìn)程的運(yùn)行。
? ? ?3、移植硬件電路設(shè)計
? ? ? 為實現(xiàn)esp32s3的視頻處理的內(nèi)存需求,我們選用內(nèi)置8M flash,外擴(kuò)8M spram的模組;攝像頭采用了ov2640作為輸入;另外,為了調(diào)試方便,采用了240*240的LCD屏作為顯示終端,可以實時看見圖像處理結(jié)果。
? ? ? 以下是原理圖:
? ? ? 整體系統(tǒng)效果如下:
? ? ? 反面的攝像頭以及補(bǔ)光燈:
? ? ?此開發(fā)板可以在某寶上面搜索esp32s3? opencv。首頁-SimpleWiFi-淘寶網(wǎng)
? ?4、Demo軟件效果
? ? ? ?一、Opencv中的目標(biāo)拾取代碼。通常,我們在圖像處理的時候,需要對采集照片進(jìn)行灰度處理,然后,對照片進(jìn)行二值化處理。進(jìn)而進(jìn)行目標(biāo)拾取。
? ? ? 使用的函數(shù)為:
? ? ?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);
? ? 輕松就會得到目標(biāo)物體,效果如下:
? ? ? 開發(fā)板中提供demo的源代碼,可以使用esp-idf進(jìn)行編譯運(yùn)行。
? ? ?二、如果進(jìn)行顏色拾取的話,可以使用以下函數(shù)
????????? 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、結(jié)語?文章來源:http://www.zghlxwxcb.cn/news/detail-696645.html
? ? ? ?在視覺處理OpenCV有著開源的優(yōu)勢,小而精悍;esp32s3具有雙核的CPU可以使用wifi進(jìn)行通訊。這樣就可以無線的方式傳輸圖像處理結(jié)果。文章來源地址http://www.zghlxwxcb.cn/news/detail-696645.html
到了這里,關(guān)于視頻圖像處理算法opencv在esp32及esp32s3上面的移植,也可以移植openmv的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!