opencv读取esp32cam视频
之前在网上看到过安卓读取esp32cam的jpeg数据流,最近又在学opencv所以就想着把java改成c,esp32cam用官方demo或arduino的demo都可以就是端口不一样而已
先来张图片
第一步建立socket并get /stream拉流,然后就是不断地读!!!!!!!!
这些都放在了一个线程
然后处理一下读取数据,因为jpeg照片数据是(byte)0xFF, (byte)0xD8开头ff d9结尾的二进制数据流所以要找到开头位置并打印出http头信息
Content-Length:这个就是图片的大小然后就从 (byte)0xFF, (byte)0xD8 开始读一定的数据
jj -= 2; int js = 2;sig = 0;
uchar *cs = new uchar[jj]; vector<uchar> jpg_buff;
cs[0] = SOI_MARKER[0];cs[1] = SOI_MARKER[1];
while (jj > 0)
{
sig = recv(clientSocket, (char*)cs+js, jj, 0); //printf("Error: Lost connection!\n");
if (sig <= 0)
{
printf("Error: Lost connection!\n");
break;
}
jj -= sig; js += sig;
}
cs就是求到的指针然后利用opencv的imdecode读取内存图像在然后得到mat类并imshow显示记得要waitkey哦
完整代码
#include<iostream>
#include <winsock2.h>
#include <Ws2tcpip.h>
#include<opencv2/opencv.hpp>
using namespace std;
using namespace cv;
#pragma comment(lib, "ws2_32.lib")
DWORD WINAPI CreateClientThread(LPVOID lpParameter);
bool a1 = true;
Mat as;
int main() {
HANDLE h_thread