当前位置:网站首页>Use UDP to send a JPEG image, and UPD will convert it into the mat format of OpenCV after receiving it

Use UDP to send a JPEG image, and UPD will convert it into the mat format of OpenCV after receiving it

2022-07-05 02:43:00 DSZS123

Because the project needs to use udp Receive one jpeg The picture file of , And then use opencv Show it .

udp recvfrom after , It's a one-dimensional array .

because jpeg Is a compressed image file , Use it directly opencv Turn this one-dimensional array into Mat The format is incorrect .

resolvent :

The sender needs to use imencode function .

The receiving end needs to use imdecode function .

Now write only the receiver . The code is as follows :

    int udp_socket_fd = socket(AF_INET,SOCK_DGRAM,0);
	if(udp_socket_fd < 0 )
	{
		perror("creat socket fail\n");
		return -1;
	}
	struct sockaddr_in  local_addr = {0};
	local_addr.sin_family  = AF_INET; // Use IPv4 agreement 
	local_addr.sin_port	= htons(12349);   // Network communication uses big end format 
	local_addr.sin_addr.s_addr = INADDR_ANY;// Let the system detect the local network card , Auto bind local IP

	ret = bind(udp_socket_fd,(struct sockaddr*)&local_addr,sizeof(local_addr));
	if(ret < 0)
	{
		perror("bind fail:");
		close(udp_socket_fd);
		return -1;
	}
	else
	{
		printf("recv ready!!!\n");
	}
	struct sockaddr_in  src_addr = {0};  // For storing each other ( The sender of the message ) Of IP Address information 
	socklen_t len = sizeof(src_addr);	// The size of the address information 


	char buf[1024*100] = {0};// Message buffer 	

	ret = recvfrom(udp_socket_fd, buf, sizeof(buf), 0, (struct sockaddr *)&src_addr, &len);
   if(ret == -1)
   {
   }
    vector<unsigned char> buff;
    for(int i=0;i<ret;i++)
    {
           buff.push_back(buf[i]);
    }
    cv::Mat show=imdecode(buff,CV_LOAD_IMAGE_COLOR);

This code bit sends the received buf Array (jpep The picture data of ), Turn into Mat show.

原网站

版权声明
本文为[DSZS123]所创,转载请带上原文链接,感谢
https://yzsam.com/2022/02/202202140859306475.html