
-
1
-
2
-
3
-
4
-
5
-
6
-
7
-
8
-
9
-
10
-
11
-
12
-
13
-
14
-
15
-
16
-
17
-
18
-
19
-
20
-
21
-
22
-
23
-
24
-
25
-
26
-
27
-
28
-
29
-
30
-
31
-
32
-
33
-
34
-
35
-
36
-
37
-
38
-
39
-
40
-
41
-
42
-
43
-
44
-
45
-
46
-
47
-
48
-
49
-
50
-
51
-
52
-
53
-
54
-
55
-
56
-
57
-
58


목차
표 및 그림목차
Ⅰ. 緖論
Ⅱ. MFC의 이해
Ⅱ-1. MFC의 Architecture
Ⅲ. 네트워크 프로그래밍 이해
Ⅲ-1. 네트워크 프로그래밍 기본개론
Ⅲ-2. 소켓 프로그래밍
Ⅲ-3. TCP/IP 프로토콜
Ⅳ. H.263 영상코덱
Ⅳ-1. H.263 알고리즘
Ⅳ-2. 비트율 제어
Ⅳ-2. 영상압축에 대한 기본적인 이론
Ⅴ. 화상채팅
Ⅴ-1. 화상채팅 응용분야
Ⅴ-2. 화상채팅 프로그램 설계
Ⅴ-3. 주요코드분석
Ⅴ-4. 실행화면
Ⅵ. 結 論
표 및 그림목차
그림 1. 도큐먼트-뷰-프레임 구조
그림 2. 기본 생성 클래스들의 상속관계
그림 3-1. TCP/IP와OSI 7 계층 프로토콜 구조의비교
그림3-2. TCP/IP 내부의 계층별 프로토콜
그림 3-3. 이더넷 프레임 구조
그림 3-4. MAC 주소 구조(48비트)
그림 3-5. IP 주소의 종류
그림 3-6. 2비트를 서브네팅 주소로 사용한 경우의 subnet mask
표 1-1. 클래스 C IP 주소에서 2비트 또는 3비트를 사용하여 서브네팅 하였을 때의 결과 비교
그림 3-7. IP 패킷 구조
그림 3-8. ARP의 동작 순서
그림 3-9. SLIP의 프레임 구조
그림 3-10. PPP 프레임 구조
그림 3-11. TCP 프로토콜 데이터 단위 (PDU)
그림 3-12. UDP 프로토콜 데이터 단위
그림 4-1. H.263 블록도
그림 4-2. TransGal의 내부구조
그림 4-3. MBEncodeGal
그림4-4. MBDecodeGal
그림 4-5. IpolGal
그림4-6. Entropy Coding
그림 4-7. 1개의 I frame과 2개의 P frame으로 이루어져 있는 경우
그림 4-8. 1개의 I frame과 5개의 P frame으로 이루어져 있는 경우
그림 4-9. 1개의 I frame과 8개의 P frame으로 이루어져 있는 경우
그림 4-10. 1개의 Iframe과 11개의 P frame으로 이루어져 있는경우 38
그림5-1. 접속 전 화면
그림 5-2. 상대방과 접속된 화면
그림 5-3. 클라이언트가 접속해 올 때 나타나는 창
그림 5-4. 화상 채팅하는 모습
그림 5-5. 영상캡쳐tap을 눌렀을 때 나타나는 창
그림 5-6. 저장되었음을 나타냄
그림 5-7. 캡쳐된 화면
그림 5-8. 채팅이 종료됨을 알려줌
Ⅰ. 緖論
Ⅱ. MFC의 이해
Ⅱ-1. MFC의 Architecture
Ⅲ. 네트워크 프로그래밍 이해
Ⅲ-1. 네트워크 프로그래밍 기본개론
Ⅲ-2. 소켓 프로그래밍
Ⅲ-3. TCP/IP 프로토콜
Ⅳ. H.263 영상코덱
Ⅳ-1. H.263 알고리즘
Ⅳ-2. 비트율 제어
Ⅳ-2. 영상압축에 대한 기본적인 이론
Ⅴ. 화상채팅
Ⅴ-1. 화상채팅 응용분야
Ⅴ-2. 화상채팅 프로그램 설계
Ⅴ-3. 주요코드분석
Ⅴ-4. 실행화면
Ⅵ. 結 論
표 및 그림목차
그림 1. 도큐먼트-뷰-프레임 구조
그림 2. 기본 생성 클래스들의 상속관계
그림 3-1. TCP/IP와OSI 7 계층 프로토콜 구조의비교
그림3-2. TCP/IP 내부의 계층별 프로토콜
그림 3-3. 이더넷 프레임 구조
그림 3-4. MAC 주소 구조(48비트)
그림 3-5. IP 주소의 종류
그림 3-6. 2비트를 서브네팅 주소로 사용한 경우의 subnet mask
표 1-1. 클래스 C IP 주소에서 2비트 또는 3비트를 사용하여 서브네팅 하였을 때의 결과 비교
그림 3-7. IP 패킷 구조
그림 3-8. ARP의 동작 순서
그림 3-9. SLIP의 프레임 구조
그림 3-10. PPP 프레임 구조
그림 3-11. TCP 프로토콜 데이터 단위 (PDU)
그림 3-12. UDP 프로토콜 데이터 단위
그림 4-1. H.263 블록도
그림 4-2. TransGal의 내부구조
그림 4-3. MBEncodeGal
그림4-4. MBDecodeGal
그림 4-5. IpolGal
그림4-6. Entropy Coding
그림 4-7. 1개의 I frame과 2개의 P frame으로 이루어져 있는 경우
그림 4-8. 1개의 I frame과 5개의 P frame으로 이루어져 있는 경우
그림 4-9. 1개의 I frame과 8개의 P frame으로 이루어져 있는 경우
그림 4-10. 1개의 Iframe과 11개의 P frame으로 이루어져 있는경우 38
그림5-1. 접속 전 화면
그림 5-2. 상대방과 접속된 화면
그림 5-3. 클라이언트가 접속해 올 때 나타나는 창
그림 5-4. 화상 채팅하는 모습
그림 5-5. 영상캡쳐tap을 눌렀을 때 나타나는 창
그림 5-6. 저장되었음을 나타냄
그림 5-7. 캡쳐된 화면
그림 5-8. 채팅이 종료됨을 알려줌
본문내용
p the callback function
// OwnWriteFunction is the global function called
// during encoding to return the encoded data...
WriteByteFunction = OwnWriteFunction;
7) H.263 encode 루틴
cam에서 영상을 받아왔을 때 불려지는 함수인 void callback(IplImage* img) 함수에 구현
// For compression data must be in YUV420 format...
// Hence before compression invoke this method
ConvertRGB2YUV(176,144,(unsigned char *)pMainDlg->buf,(unsigned int *)&yuv);
// Compress the frame.....
pMainDlg->cparams.format=CPARAM_QCIF;
pMainDlg->cparams.inter = CPARAM_INTRA;
pMainDlg->cparams.Q_intra = 8;
pMainDlg->cparams.data=(unsigned int *)&yuv;
// Data in YUV format...
CompressFrame(&pMainDlg->cparams, &bits);
void OwnWriteFunction(int byte)
{
pMainDlg->buf[sendlen]=(char)byte;
sendlen++;
return;
}
8)H.263 decoder 초기화 루틴
영상데이터를 받아왔을때 수행해야 하므로 socket 클래스에서 초기화 시켰고 그러기 위해 소켓 생성자인 CConfSocket::CConfSocket()에 구현하였다.
InitH263Decoder();
9) H.263의 decode루틴
패킷(영상데이터)를 받아왔을대 호출되는 함수인 void CConfSocket::OnReceive(int nErrorCode) 에 구현
DecompressFrame((unsigned char *)data,len,(unsigned char*)img->imageData, 176*144*3);
10) 캠의 초기화
dialog 창이 처음 초기화될때 불려지는 함수인 BOOL CVideoConfDlg::OnInitDialog() 에 구현되어 있다.
int nselected = cvcamGetCamerasCount();
if(nselected==0){
::AfxMessageBox("카메라를 연결하세요");
return TRUE;
}
cvcamSetProperty(0, CVCAM_PROP_ENABLE, &nselected);
int m_Width = 176;
int m_Height = 144;
cvcamSetProperty(0, CVCAM_PROP_CALLBACK, callback);
// frame 마다 호출될 함수
VidFormat vidFmt={ m_Width, m_Height, 30.0};
cvcamSetProperty(0, CVCAM_PROP_SETFORMAT, &vidFmt);
cvcamInit( );
cvcamStart( );
11) 캠에서 받아온 영상을 출력하는 루틴
cam에서 영상을 받아왔을 때 불려지는 함수인 void callback(IplImage* img) 함수에 구현
pDC_FRAME1 = GetDlgItem(IDC_FRAME1)->GetDC();
pframe1=pDC_FRAME1->GetSafeHdc();
CvvImagecImage;
cImage.CopyOf(img);
RECT rect;
rect.top=0;
rect.left=0;
rect.right=176;
rect.bottom=144;
cImage.DrawToHDC(pframe1,&rect);
Ⅴ-4. 실행화면
프로그램을 실행시켰을 때 처음으로 보이는 화면이다.
그림5-1. 접속 전 화면
원하는 상대방의 IP주소를 써넣고, 연결tap을 누른다.
그림 5-2. 상대방과 접속된 화면
그림 5-3. 클라이언트가 접속해 올 때 나타나는 창
제일 아래창에 글을 쓰고, 보내기tap을 누르면 중간창에 나타난다.
그림 5-4. 화상 채팅하는 모습
오른쪽 위에 영상캡쳐tap을 누르면 그 순간 영상이 캡쳐되어 원하는 위치에 저장할 수 있다.
그림 5-5. 영상캡쳐tap을 눌렀을 때 나타나는 창
원하는 위치를 선택하여 저장했을 때 나타나는 창이다.
그림 5-6. 저장되었음을 나타냄
캡쳐된 화면은 BMP로 저장된다. 저장된 화면은 이렇다.
그림 5-7. 캡쳐된 화면
접속을 끊었을 때 나타나는 창이다.
그림 5-8. 채팅이 종료됨을 알려줌
Ⅵ. 結 論
본 논문에서는 Visual C++를 이용하여 화상과 데이터가 함께 전송되는 화상채팅 프로그램을 구현하여 보았다. OpenCV라는 기존과 차별화된 라이브러리를 사용함으로 구현의 편리성을 더욱 높였으며, h. 263영상압축 코덱을 사용함으로써 더욱 깔끔한 영상 전송이 가능하게 하였다.
이 프로그램은 또한 캡처 기능을 추가하여 상대방과 채팅 시에 원하는 순간 언제든지 캡처할 수 있게 하였으며 이것은 사용자의 욕구에 따라 사용할 수 있다는 점에서 장점이라고 할 수 있다.
參考文獻
[1] Michael J. Donahoo, Kenneth L. Calvert, "The Pocket Guide to TCP/IP Sockets"
Scitech, 2001.
[2] 권혜윤, “리눅스와 윈도우 기반의 TCP/IP 소켓 프로그래밍”, 대림, 2006.
[3] 황재정, “디지털 영상공학”, 아진, 1999.
[4] 윤성우, “TCP/IP 소켓 프로그래밍”, 프리렉, 2002.
[5] 서진택, “윈도우 프로그래머를 위한 MFC 구조와 원리”, 한빛 미디어, 2005.
[6] 신화선, “윈도우 프로그래밍 Visual C++ MFC Programming”, 한빛 미디어, 2003.
[7] 김지관, “멀티미디어 통신 네트워크”, 나남출판, 2000.
[8] 강동중, “Visual C++을 이용한 디지털 영상처리”, 사이텍 미디어, 2003.
[9] 전자신문
// OwnWriteFunction is the global function called
// during encoding to return the encoded data...
WriteByteFunction = OwnWriteFunction;
7) H.263 encode 루틴
cam에서 영상을 받아왔을 때 불려지는 함수인 void callback(IplImage* img) 함수에 구현
// For compression data must be in YUV420 format...
// Hence before compression invoke this method
ConvertRGB2YUV(176,144,(unsigned char *)pMainDlg->buf,(unsigned int *)&yuv);
// Compress the frame.....
pMainDlg->cparams.format=CPARAM_QCIF;
pMainDlg->cparams.inter = CPARAM_INTRA;
pMainDlg->cparams.Q_intra = 8;
pMainDlg->cparams.data=(unsigned int *)&yuv;
// Data in YUV format...
CompressFrame(&pMainDlg->cparams, &bits);
void OwnWriteFunction(int byte)
{
pMainDlg->buf[sendlen]=(char)byte;
sendlen++;
return;
}
8)H.263 decoder 초기화 루틴
영상데이터를 받아왔을때 수행해야 하므로 socket 클래스에서 초기화 시켰고 그러기 위해 소켓 생성자인 CConfSocket::CConfSocket()에 구현하였다.
InitH263Decoder();
9) H.263의 decode루틴
패킷(영상데이터)를 받아왔을대 호출되는 함수인 void CConfSocket::OnReceive(int nErrorCode) 에 구현
DecompressFrame((unsigned char *)data,len,(unsigned char*)img->imageData, 176*144*3);
10) 캠의 초기화
dialog 창이 처음 초기화될때 불려지는 함수인 BOOL CVideoConfDlg::OnInitDialog() 에 구현되어 있다.
int nselected = cvcamGetCamerasCount();
if(nselected==0){
::AfxMessageBox("카메라를 연결하세요");
return TRUE;
}
cvcamSetProperty(0, CVCAM_PROP_ENABLE, &nselected);
int m_Width = 176;
int m_Height = 144;
cvcamSetProperty(0, CVCAM_PROP_CALLBACK, callback);
// frame 마다 호출될 함수
VidFormat vidFmt={ m_Width, m_Height, 30.0};
cvcamSetProperty(0, CVCAM_PROP_SETFORMAT, &vidFmt);
cvcamInit( );
cvcamStart( );
11) 캠에서 받아온 영상을 출력하는 루틴
cam에서 영상을 받아왔을 때 불려지는 함수인 void callback(IplImage* img) 함수에 구현
pDC_FRAME1 = GetDlgItem(IDC_FRAME1)->GetDC();
pframe1=pDC_FRAME1->GetSafeHdc();
CvvImagecImage;
cImage.CopyOf(img);
RECT rect;
rect.top=0;
rect.left=0;
rect.right=176;
rect.bottom=144;
cImage.DrawToHDC(pframe1,&rect);
Ⅴ-4. 실행화면
프로그램을 실행시켰을 때 처음으로 보이는 화면이다.
그림5-1. 접속 전 화면
원하는 상대방의 IP주소를 써넣고, 연결tap을 누른다.
그림 5-2. 상대방과 접속된 화면
그림 5-3. 클라이언트가 접속해 올 때 나타나는 창
제일 아래창에 글을 쓰고, 보내기tap을 누르면 중간창에 나타난다.
그림 5-4. 화상 채팅하는 모습
오른쪽 위에 영상캡쳐tap을 누르면 그 순간 영상이 캡쳐되어 원하는 위치에 저장할 수 있다.
그림 5-5. 영상캡쳐tap을 눌렀을 때 나타나는 창
원하는 위치를 선택하여 저장했을 때 나타나는 창이다.
그림 5-6. 저장되었음을 나타냄
캡쳐된 화면은 BMP로 저장된다. 저장된 화면은 이렇다.
그림 5-7. 캡쳐된 화면
접속을 끊었을 때 나타나는 창이다.
그림 5-8. 채팅이 종료됨을 알려줌
Ⅵ. 結 論
본 논문에서는 Visual C++를 이용하여 화상과 데이터가 함께 전송되는 화상채팅 프로그램을 구현하여 보았다. OpenCV라는 기존과 차별화된 라이브러리를 사용함으로 구현의 편리성을 더욱 높였으며, h. 263영상압축 코덱을 사용함으로써 더욱 깔끔한 영상 전송이 가능하게 하였다.
이 프로그램은 또한 캡처 기능을 추가하여 상대방과 채팅 시에 원하는 순간 언제든지 캡처할 수 있게 하였으며 이것은 사용자의 욕구에 따라 사용할 수 있다는 점에서 장점이라고 할 수 있다.
參考文獻
[1] Michael J. Donahoo, Kenneth L. Calvert, "The Pocket Guide to TCP/IP Sockets"
Scitech, 2001.
[2] 권혜윤, “리눅스와 윈도우 기반의 TCP/IP 소켓 프로그래밍”, 대림, 2006.
[3] 황재정, “디지털 영상공학”, 아진, 1999.
[4] 윤성우, “TCP/IP 소켓 프로그래밍”, 프리렉, 2002.
[5] 서진택, “윈도우 프로그래머를 위한 MFC 구조와 원리”, 한빛 미디어, 2005.
[6] 신화선, “윈도우 프로그래밍 Visual C++ MFC Programming”, 한빛 미디어, 2003.
[7] 김지관, “멀티미디어 통신 네트워크”, 나남출판, 2000.
[8] 강동중, “Visual C++을 이용한 디지털 영상처리”, 사이텍 미디어, 2003.
[9] 전자신문
추천자료
웹에디터 조사하기
지문인식을 통한 수치해석 프로그램
원격탐사(Remote Sensing) 기술
MFC를 이용하여 밝기와 명암값 조절
히스토그램 쉬링크 256, 트루칼라..by c...
동영상 DCT 변환, 양자화, 모션벡터를 이용한 부호화 및 복호화 과정 이해
MPEG-2 분석 자료
히스토그램, equalization
소설 서편제와 영화 서편제 연구
모아레 패턴, 맥놀이현상 조사와 매트랩에서 이미지의 푸리에 변환
matlab히스토그램평활화
prac_surf
DSP_main1 - EE505전기공학실험 Digital Image Processing - RGB to YCbCr Color Coordinate ...
개인정보 보호법 요약
소개글