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(2, 0); 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), 0, 0, 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(2, 0); 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, 0, sizeof(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 |
---|