본문 바로가기
연구중/영상처리

OPENCV UDP STREMING(CPP)

by 루티즈 2018. 6. 15.
반응형



OPENCV UDP STREMING(CPP)


-       SIMPLE UDP STREMING PROGRAM


-       PROCESS


n  CLIENT CAPTURE OPENCV MAT IMAGE FROM WEBCAM.


n  CLIENT COMPRESS OPENCV MAT IMAGE TO JPEG.


n  CLIENT SEND PACKIT COUNT ( IMAGE FILE /  PACKET_SIZE ) .


n  CLIENT SEND ALL PACKIT.


n  SERVER DECODE USING ALL PACKITS RECEIVED.


-       SOCKET IO


n  FIRST SERVER RECEIVE PACKIT COUNT.


n  NEXT SERVER RECEIVE TOTAL PACKIT(IMAGE FILE).

  






<CLIENT>


1.    UDP SOCKET CONNECTION


A.   WINSOCK2 INITIALIZE



1
2
3
4
5
6
7
WORD wVersion;  
WSADATA wsaData;  
 
wVersion = MAKEWORD(20); 
 
if (WSAStartup(wVersion, &wsaData) != 0
    throw SocketException("Failed init wsastartup");  
cs



B.   SOCKET INITIALIZE



1
2
3
if ((sockDesc = socket(PF_INET, type, protocol)) < 0) {  
     throw SocketException("Failed init socket"true);  
cs




2.    IMAGE HANDLING



A.    CAPTURE WABCAM(UVC SUPPORT)



1
2
3
4
5
6
7
8
9
10
VideoCapture cap(0); 
 
if (!cap.isOpened()) {  
    cerr << "Failed to open camera";  
    exit(1);  
}  
 
While(1){
    cap >> frame;  
}
cs




B.    IMAGE ENCODING



1
2
3
4
5
6
7
resize(frame, send, Size(FRAME_WIDTH, FRAME_HEIGHT), 00, INTER_LINEAR);  
 
vector <int> compression_params;  
 
compression_params.push_back(CV_IMWRITE_JPEG_QUALITY);  
compression_params.push_back(jpegqual);  
imencode(".jpg", send, encoded, compression_params); 
cs




3.    SENDTO SERVER


A.    SEND PACKIT COUNT



1
2
3
4
int ibuf[1];  
ibuf[0= total_pack;  
 
sock.sendTo(ibuf, sizeof(int), servAddress, servPort);
cs



B.    SEND ALL PACKITS



1
2
for (int i = 0; i < total_pack; i++
   sock.sendTo( &encoded[i * PACK_SIZE], PACK_SIZE, servAddress, servPort); 
cs

 

 

<SERVER>


1.    UDP SOCKET CONNECTION


A.    WINSOCK2 INITIALIZE



1
2
3
4
5
6
7
8
WORD wVersion;  
 
WSADATA wsaData;  
 
wVersion = MAKEWORD(20); 
 
if (WSAStartup(wVersion, &wsaData) != 0
    throw SocketException("Falied to init wsastartup ");  
cs



B.    SOCKET INITIALIZE



1
2
3
if ((sockDesc = socket(PF_INET, type, protocol)) < 0) {  
     throw SocketException("Failed init socket"true);  
}  
cs




C.    SOCKET BINDING



1
2
3
4
5
6
7
8
9
10
sockaddr_in clientAddr;  
memset( &clientAddr, 0sizeof(clientAddr));  
 
clientAddr.sin_family = AF_INET;  
clientAddr.sin_addr.s_addr = htonl(INADDR_ANY);  
clientAddr.sin_port = htons(localPort);  
 
if (bind(sockDesc, (sockaddr * ) &clientAddr, sizeof(sockaddr_in)) < 0){  
    throw SocketException("Failed binding socke"true);  
}  
cs



D.    SOCKET OPTION



1
2
setsockopt(sockDesc, SOL_SOCKET, SO_BROADCAST, (raw_type * ) & broadcastPermission, sizeof(broadcastPermission));  
 
cs





2.    RECEIVE PACKETS



A.    RECEIVE PACKIT COUNT



1
recvMsgSize = sock.recvFrom(buffer, BUF_LEN, sourceAddress, sourcePort);
cs




B.    RECEIVE ALL PACKITS




1
2
3
4
5
6
7
8
9
10
for (int i = 0; i < total_pack; i++) {  
 
       recvMsgSize = sock.recvFrom(buffer, BUF_LEN, sourceAddress, sourcePort);  
 
       if (recvMsgSize != PACK_SIZE) {  
           cerr << "unnormal packit size:" << recvMsgSize << endl;  
           continue;  
       }  
       memcpy( &longbuf[i * PACK_SIZE], buffer, PACK_SIZE);  
}  
cs





3.    IMAGE HANDLING



A.   DECODE PACKIT TO MAT(COLOR)



1
2
Mat rawData = Mat(1, PACK_SIZE * total_pack, CV_8UC1, longbuf);  
Mat frame = imdecode(rawData, CV_LOAD_IMAGE_COLOR);  
cs




B.   SHOW COLOR_MAT



1
imshow("client", frame);  
cs

 


<RESULT>



 

 

 

 


반응형

'연구중 > 영상처리' 카테고리의 다른 글

[OPENCV]QR Marker detection(QR 마커 인식)  (0) 2018.01.31