提问者:小点点

用C++实现OpenCV mat数据流


我目前正在一个Linux机器上处理对象检测,而不需要显示(使用OpenCV和C++)。 我需要流式OpenCV输出数据(mat)到其他机器(Linux/Windows/Android)显示为现场视频。 当然,我想要压缩(不是原始的CV mat数据)。 有什么实施建议吗?

谢谢!


共1个答案

匿名用户

也许你可以尝试通过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;
}

相关问题


MySQL Query : SELECT * FROM v9_ask_question WHERE 1=1 AND question regexp '(c++|opencv|mat|数据流)' ORDER BY qid DESC LIMIT 20
MySQL Error : Got error 'repetition-operator operand invalid' from regexp
MySQL Errno : 1139
Message : Got error 'repetition-operator operand invalid' from regexp
Need Help?