我目前正在一个Linux机器上处理对象检测,而不需要显示(使用OpenCV和C++)。 我需要流式OpenCV输出数据(mat)到其他机器(Linux/Windows/Android)显示为现场视频。 当然,我想要压缩(不是原始的CV mat数据)。 有什么实施建议吗?
谢谢!
也许你可以尝试通过TCP传输数据。
最好使用线程发送video_data
,否则会影响OpenCV获取下一帧图像的过程。 你可以在发送之前添加一些图像压缩的算法。 代码如下所示:
#include <atomic>
#include <sys/socket.h>
#include <netinet/in.h>
#include <arpa/inet.h>
std::string IP_ADDR {"123.45.67.89"};
int PORT = 6666;
std::atomic_flag flag = ATOMIC_FLAG_INIT;
void *tcp_thread_graph(void *arg) {
struct sockaddr_in addr;
int sockfd = socket(AF_INET, SOCK_STREAM, 0);
if(sockfd == -1) { throw; }
bzero(&addr, sizeof(addr));
addr.sin_family = AF_INET;
addr.sin_addr.s_addr = inet_addr(IP_ADDR.c_str());
addr.sin_port = htons(PORT);
int err = connect(sockfd, (struct sockaddr *)&addr, sizeof(addr));
while(flag.test_and_set()) {
//TODO: add compression algorithm before sending
send(sockfd, (char*)VIDEO_DATA, sizeof(VIDEO_DATA), 0);
}
return nullptr;
}