Please Enable JavaScript!
Gon[ Enable JavaScript ]

OpenCV2.4 에서 raw 파일 로딩하기

기타 언어/C# & MFC
반응형

OpenCV2.4 에서 raw 파일 로딩하기

 

개발환경 : window 7 32bit, Visual Studio 2010, OpenCV 2.4

 

 

OpenCV 에서 이미지 파일을 로딩하는 함수 cvLoadImage raw 파일을

로딩하지 못한다. 그래서 따로 함수를 하나 만들었다.

파라미터로 전달받은 IplImage 객체에 raw 데이터 크기 만큼

For 문을 돌면서 값을 setting 하는 내용이다.

 

함수의 파라미터는 다음과 같다.

strInFileName : 다이얼로그에서 리턴받은 FilePath

nSizeX : 이미지의 넓이raw 데이터는 크기를 자동으로 알아올수 없기 때문에

        넘겨줘야한다.

nSizeY : 이미지의 높이

nChannel : 1 이면 gray 를 나타내고 3이면 컬러를 의미한다.

outImage : IplImage 포인터를 넘겨준다. 함수를 호출하기 전에 cvCreateImage

         통해 객체를 생성해준다.

 

호출하는 함수의 내용이다.

// OpenCV를 이용해서 RAW 로딩한다 
void CTotalVisionDlg::OnBnClickedBtnOpencvraw()
{
	CFileDialog fileDlg(TRUE, NULL, NULL, OFN_EXPLORER|OFN_HIDEREADONLY, 
                                          "지원 영상 파일(*.raw) | *.raw||");
	int iReturn = fileDlg.DoModal();
	if(iReturn == IDOK)
	{  
		// OpenCV 구현 
		int nSizeX = 256;
		int nSizeY = 256;
		m_pRawImage = cvCreateImage(cvSize(nSizeX,nSizeY),IPL_DEPTH_8U,1);	
		
		cvZero(m_pRawImage);

		m_cImage.ReadRawImg(fileDlg.GetPathName(),nSizeX,nSizeY,1,m_pRawImage);

		Invalidate(TRUE);
	}
}

Raw 데이터를 만들어 내는 함수 ReadRawImg 의 내용이다.

 

void CvvImage::ReadRawImg(CString strInFileName,int nSizeX,int nSizeY,int nChannel,IplImage *outImage)

{

    FILE *fp;

    int i,j,k;

    char strFileName_c[256];

    strcpy(strFileName_c, strInFileName.GetBuffer());

    if(fopen_s(&fp,strFileName_c, "rb") ==0 )

    {

        unsigned char *temp;

        temp=(unsigned char *)calloc(sizeof(unsigned char),nSizeX*nSizeY);

        for(i=0;i<nSizeX;i++)

        {

           fread(temp,nSizeX*nChannel,sizeof(unsigned char),fp);

           for(j=0;j<nSizeY;j++)

           {

              for(k=0;k<nChannel;k++)

              {

               outImage->imageData[i*nSizeX*nChannel + j*nChannel+k]=temp[j*nChannel+k];

              }

            }

        }

        free(temp);

    }

    fclose(fp);

}

 

반응형
Posted by 녹두장군

댓글을 달아 주세요