<--애드센스--> <--네이버웹마스터-->

[컴퓨터 비젼] - openCV/MFC를 이용한 영상신호처리

 

플리케이션 마법사(AppWizard)를 이용하여 영상신호처리 MFC 프로젝트 만들기

일단 MFC가 지원되지 않는다면? 

 

파일 -> 새로 만들기 -> visual studio 설치 관리자 열기

MFC 및 ATL 지원 다운로드!

변수 추가하기

추가 후 cpp파일에 다음과 같은 코드를 추가한다.

 

unsigned char *m_InImage;
unsigned char *m_OutImage;
unsigned int height, width;

CMFCtestDoc::CMFCtestDoc()
{
m_InImage = NULL;
m_OutImage = NULL;
width = 0;
height = 0;
}

CMFCtestDoc::~CMFCtestDoc()
{
if (m_InImage != NULL)
delete(m_InImage);
if (m_OutImage != NULL)
delete(m_OutImage);
}

void CMFC_Exp01Doc::Serialize(CArchive& ar)
{


	if (ar.IsStoring())  
	{
		// TODO: 여기에 저장 코드를 추가합니다.
		// 영상처리 후 출력영상 m_OutImage[]를 raw 데이터로  저장  
		if(width != 0 && height != 0)
		{ 
			ar.Write(m_OutImage, width*height); 
		}
	}
	else
	{
		// TODO: 여기에 로딩 코드를 추가합니다.
		CString strTemp = ar.m_strFileName.Right(3);

		// 영상파일이 RAW로 저장되어 있는 경우
		if (toupper( strTemp[ 0 ] ) == 'B' &&
			toupper( strTemp[ 1 ] ) == 'M' &&
			toupper( strTemp[ 2 ] ) == 'P' )
		{
			// 입력할 화일의 포인트를 가져옴.

			CImage m_Image;
			m_Image.Load(ar.m_strFileName);
			width = m_Image.GetWidth();
			height = m_Image.GetHeight();
				
			m_InImage = (unsigned char*) malloc(sizeof(unsigned char) * width * height);
			m_OutImage = (unsigned char*) malloc(sizeof(unsigned char) * width * height);

			int ws = width * (m_Image.GetBPP() / 8);

			unsigned char *m_tmpImage = (unsigned char*) malloc(sizeof(unsigned char) * ws * height);

			if(m_Image.GetBPP() == 1)
			{
				AfxMessageBox((LPCTSTR)"읽을 수 있는 파일 형식이 아닙니다.");
				return;
			}
			else if(m_Image.GetBPP() == 8)
			{
				for (int y= 0; y <height; y++){

					BYTE * srcImg = NULL;                                    ;

					srcImg = (BYTE *) m_Image.GetPixelAddress(0,y);

					memcpy(&m_InImage[y * ws], srcImg, ws);
				}

			}
			else if(m_Image.GetBPP() == 24)
			{
				for (int y= 0; y <height; y++){

					BYTE * srcImg = NULL;                                    ;

					srcImg = (BYTE *) m_Image.GetPixelAddress(0,y);

					memcpy(&m_tmpImage[y * ws], srcImg, ws);   
				}

				int iter = 0;
				for(int y=0; y<height; y++)
				{
					for(int x=0; x<width; x++)
					{
						m_InImage[(y * width) + x] = 
							(
							m_tmpImage[iter	   ] * 0.21 +
							m_tmpImage[iter + 1] * 0.72 +
							m_tmpImage[iter + 2] * 0.07
							);
						iter += 3;
					}
				}

			}
		}

		// 입력파일이 BMP파일이 아닌경우
		else
		{
			AfxMessageBox((LPCTSTR)"읽을 수 있는 파일 형식이 아닙니다.");
			return;
		}		
	}

}

출력 화면

+ Recent posts