콘텐츠로 바로 가기

iolibrt#

iolibrt 라이브러리는 일반적으로 사용되는 이미지 포맷을 로드하고 저장하는 함수를 제공합니다. Windows에서 이 라이브러리는 이미지 시퀀스를 비디오 파일로 로드하거나 비디오 파일에 .avi 비디오 파일로.

라이브러리를 사용하려면 include 파일인 sisoIo.h 을(를) 소스 코드에 추가해야 합니다.

#include <sisoIo.h>

추가로, iolibrt.lib 을(를) Microsoft Visual Studio 프로젝트에 추가해야 하며, Linux 프로젝트의 경우 libiolibrt.so Linux 프로젝트에 추가합니다. CMake를 사용하는 경우 패키지 이름은 SisoIoLib이며, 라이브러리는 변수에 저장됩니다. ${SISOIOLIB_LIBRARIES} 그리고 include 디렉토리는 다음 변수에 저장됩니다. ${SISOIOLIB_INCLUDE_DIR}. 프로젝트 및 CMake 사용 방법에 대한 자세한 내용은 전제 조건 을(를) 참조하십시오.

iolibrt의 오류 처리#

API의 대부분의 함수는 int 결과 코드입니다. 함수 호출이 성공적으로 실행되면 반환 값은 0이 되며, 일부 함수의 경우 0 이상이 됩니다. 음수 값은 대부분 오류 상태를 나타냅니다. Error Codes는 다음 헤더 파일에 정의되어 있습니다. sisoIoFileErrorCodes.h 파일 읽기 및 쓰기와 관련된 일반적인 오류의 경우, sisoIoBmpErrorCodes.h, sisoIoRawErrorCodes.h 및 sisoIoTiffErrorCodes.h 특정 파일 형식과 관련된 오류의 경우입니다.

본 문서의 나머지 부분에 있는 코드 예제에는 애플리케이션의 요구 사항에 따라 달라지는 오류 처리가 포함되지 않습니다. 그러나 가능한 한 함수가 성공적으로 실행되었는지 반환 코드를 확인합니다.

이미지 파일 작업#

이미지 입력/출력 라이브러리는 Windows Bitmap(.bmp)과 Tagged Image File Format(.tif 또는 .tiff)이라는 두 가지 표준 이미지 파일 포맷을 지원합니다. 또한 표준 파일 포맷으로 표현할 수 없는 데이터를 위해 최소한의 헤더가 포함된 원시 데이터 파일 포맷(.raw)도 지원합니다. .raw 파일의 헤더에는 순서대로 다음과 같은 정보가 포함됩니다.

  1. 이미지 너비를 설명하는 4바이트
  2. 이미지 높이를 설명하는 4바이트
  3. 픽셀당 비트 수를 설명하는 4바이트 (예: 8비트 그레이 = 8, 14비트 그레이 = 14, 10비트 RGB = 30)
  4. 픽셀당 바이트 수를 설명하는 4바이트. 픽셀당 바이트 수는 반올림됩니다 (예: 10비트 = 2바이트)
  5. 원시 데이터

이 장의 함수들은 파일 이름의 확장자로부터 파일 형식을 판별합니다.

이미지 파일 열기#

int IoImageOpen(
    const char * file,
    SisoIoImageEngine ** handle);

int IoImageOpenEx(
    const char * file,
    SisoIoImageEngine ** handle,
    int rgbSequence);

int IoFreeImage(
    SisoIoImageEngine * handle);
int IoGetWidth(
    const SisoIoImageEngine * handle);

int IoGetHeight(
    const SisoIoImageEngine * handle);

int IoGetBitsPerPixel(
    const SisoIoImageEngine * handle);

int IoGetBitsPerComponent(
    const SisoIoImageEngine * handle) ;

int IoGetNrOfComponents(
    const SisoIoImageEngine * handle);

const void * IoImageGetData(
    const SisoIoImageEngine * handle);
size_t IoCalculateBufferSize(
    int width,
    int height,
    int bitsPerPixel);

이미지 파일을 열기 위해 IoImageOpen() 또는 IoImageOpenEx() 함수를 호출할 수 있습니다. 두 함수 모두 첫 번째 파라미터로 파일 이름을, 그리고 이미지 데이터에 접근하는 함수에서 사용될 SisoIoImageEngine * 타입의 변수에 대한 포인터를 필요로 합니다. 함수 IoImageOpenEx() 는 파라미터를 rgbSequence 로 1 설정하여 빨강, 초록, 파랑 데이터의 순서가 반전된 이미지에 대해 호출할 수 있습니다.

더 이상 이미지가 필요하지 않은 경우, 이미지 데이터의 Memory를 해제하기 위해 IoFreeImage() 함수를 호출해야 합니다.

이미지 데이터의 크기(dimensions)와 데이터 형식을 얻기 위해 IoGetWidth(), IoGetHeight(), IoGetBitsPerPixel(), IoGetBitsPerComponent() 및 IoGetNrOfComponents() 함수를 호출할 수 있습니다.

이미지 데이터가 포함된 버퍼의 포인터를 반환하는 IoImageGetData() 함수를 호출하여 이미지 데이터에 접근할 수 있습니다. 버퍼의 크기를 얻으려면 IoCalculateBufferSize() 이(가) 사용될 수 있습니다.

이미지 데이터는 일반적으로 여러 라인으로 나뉩니다. 이미지의 높이는 이미지 데이터가 구성된 라인 수입니다. 각 라인은 픽셀들로 구성되며 이미지의 너비는 한 라인에 있는 픽셀 수입니다. 각 픽셀은 하나 이상의 색상 컴포넌트로 표현됩니다. 그레이스케일 이미지는 일반적으로 픽셀당 하나의 컴포넌트(그레이 값)를 가집니다. 컬러 이미지는 일반적으로 빨강, 초록, 파랑에 대한 값이 각각 하나씩 총 세 개의 컴포넌트를 포함합니다. 추가 컴포넌트는 투명도 값, 적외선 또는 X선 컴포넌트일 수 있습니다. 컴포넌트들은 일반적으로 동일한 수의 비트를 사용하여 인코딩됩니다. 컴포넌트 수와 픽셀당 비트 수를 Pixel Format이라고 합니다. (경우에 따라 픽셀당 비트 대신 컴포넌트당 비트가 사용되기도 합니다.)

Pixel Format에 따라, 각 라인의 시작 부분이 정의된 정렬로 시작하도록 하기 위해 각 라인의 끝에 일부 패딩이 포함될 수 있습니다. 함수 IoCalculateBufferSize() 는 라인이 항상 바이트 경계에서 시작한다고 가정하므로, 픽셀당 8비트의 배수를 사용하지 않는 Pixel Format의 경우 라인 끝에 패딩 비트가 포함될 수 있으며 다음 라인은 버퍼의 다음 바이트에서 시작됩니다.

이미지 파일 저장#

int IoSaveImageExt(
    const char * file,
    void * data,
    int width,
    int height,
    int bitsPerPixel);

이미지 데이터를 파일에 저장하기 위해 IoSaveImageExt() 함수를 호출할 수 있습니다. 이 함수는 첫 번째 파라미터로 파일 이름을, 두 번째 파라미터로 이미지 데이터가 포함된 버퍼에 대한 포인터를 요구합니다. 나머지 세 개의 파라미터는 이미지 크기와 픽셀당 비트 수를 함수에 전달합니다.

다음 파일 포맷으로 저장할 수 있습니다. .tif,.tiff, .bmp, .raw. 파일 포맷은 다음을 통해 자동으로 감지됩니다. const char * file.

이미지 시퀀스 파일 작업#

이미지 입출력 라이브러리는 간단한 이미지 시퀀스 파일 형식을 지원합니다. 이미지 시퀀스 파일에는 동일한 크기와 Pixel Format을 가진 여러 개의 이미지가 포함됩니다. 각 이미지에는 시퀀스 인덱스와 프레임 번호가 할당됩니다. 시퀀스 인덱스는 파일 내 이미지의 위치에 해당하며, 시퀀스 인덱스 0은 시퀀스 파일의 첫 번째 이미지, 1은 두 번째 이미지 등을 나타냅니다. 프레임 번호는 획득 과정에서 얻어지며 일반적으로 1부터 시작하고, 모든 연속된 이미지가 시퀀스에 기록되지 않은 경우 프레임 번호에 건너뜀(gaps)이 포함될 수 있습니다.

이미지 시퀀스 파일에 대해 정의된 표준 파일 확장자는 없으며, 권장되는 확장자는 다음과 같습니다. .isq 또는 .imageseq.

이미지 시퀀스 파일 열기#

int IoOpenSeq(
    void ** handle,
    const char * file,
    int * width,
    int * height,
    int * bitsPerPixel,
    int flags);

int IoCloseSeq(
    void * handle);
int IoGetSeqInfo(
    void * handle,
    int * nrOfFrames,
    int * nrOfLostFrames);

int IoReadNextSeqPicture(
    void * handle,
    int * frame,
    void * buffer);

이미지를 읽기 위해 기존 이미지 시퀀스 파일을 열려면 다음 함수를 IoOpenSeq() 호출할 수 있습니다. 이 함수는 이미지 시퀀스 파일의 데이터에 액세스하는 함수에 사용될 void * 에 handle 유형의 변수에 대한 포인터와, 매개변수의 파일 이름, file 매개변수의 이미지 크기에 대한 세 가지 변수 포인터, 그리고 매개변수의 width 및 height 픽셀당 비트 수를 필요로 합니다. bitsPerPixel을(를) 호출하여 이벤트 소스 그룹의 이벤트를 동기적으로 대기할 수 있습니다. 파라미터 flags 은(는) 향후 확장을 위해 예약되어 있으며 항상 0으로 설정해야 합니다.

응용 프로그램이 이미지 시퀀스 파일의 데이터 액세스를 완료하면 다음 함수를 IoCloseSeq() should be called.

이미지 시퀀스 파일에서 다음 이미지를 읽으려면 다음 함수를 IoReadNextSeqPicture() 호출할 수 있습니다. 이 함수는 이전 호출의 핸들을 필요로 하며, IoOpenSeq() 에 handle을(를) 전달하고, 프레임 번호에 대한 int 매개변수에 이미지의 프레임 번호를 저장하고 frame 매개변수에 이미지 데이터를 저장할 버퍼에 대한 포인터를 buffer전달합니다. 버퍼는 이미지 크기 및 Pixel Format에 따라 이미지 데이터를 저장할 수 있을 만큼 충분히 커야 하며, 예를 들어 다음 함수 호출을 통해 계산할 수 있습니다. IoCalculateBufferSize().

함수 IoGetSeqInfo() 을(를) 호출하여 이미지 시퀀스 파일에 저장된 이미지 수 및 시퀀스의 프레임 번호 간 간격의 합에 대한 정보를 요청할 수 있습니다.

이미지 시퀀스 파일 쓰기#

int IoCreateSeq(
    void ** handle,
    const char * file,
    int width,
    int height,
    int bitsPerPixel,
    int flags);

int IoCloseSeq(
    void * handle);

int IoWriteNextSeqPicture(
    void * handle,
    int frame,
    const void * buffer);

이미지를 쓸 수 있는 새로운 이미지 시퀀스 파일을 생성하려면 다음 함수를 IoCreateSeq() 호출할 수 있습니다. 이 함수는 이미지 시퀀스 파일의 데이터에 액세스하는 함수에 사용될 void * 에 handle 유형의 변수에 대한 포인터와, 매개변수의 파일 이름, file매개변수의 이미지 크기 및 width 및 height 픽셀당 비트 수를 필요로 합니다. bitsPerPixel을(를) 호출하여 이벤트 소스 그룹의 이벤트를 동기적으로 대기할 수 있습니다. 파라미터 flags 은(는) 향후 확장을 위해 예약되어 있으며 항상 0으로 설정해야 합니다.

응용 프로그램이 이미지 시퀀스 파일의 데이터 액세스를 완료하면 다음 함수를 IoCloseSeq() should be called.

이미지 시퀀스 파일에 다음 이미지를 추가하려면 다음 함수를 IoWriteNextSeqPicture() 호출할 수 있습니다. 이 함수는 이전 호출의 핸들을 필요로 하며, IoCreateSeq() 에 handle매개변수의 이미지 프레임 번호 및 frame 매개변수의 이미지 데이터를 포함하는 버퍼에 대한 포인터를 buffer전달합니다. 버퍼는 이미지 크기 및 Pixel Format에 따라 이미지 데이터를 제공할 수 있을 만큼 충분히 커야 하며, 예를 들어 다음 함수 호출을 통해 계산할 수 있습니다. IoCalculateBufferSize().

비디오 파일 작업 (Windows 전용)#

Microsoft Windows 운영 체제용 Framegrabber API를 사용할 때 이미지 입력/출력 라이브러리는 Audio Video Interleave(.avi) 파일 형식에 대한 제한적인 지원을 제공합니다.

비디오 파일 열기#

int IoOpenAVI(
    void ** handle,
    const char * file,
    int * width,
    int * height,
    int * bitDepth);

int IoCloseAVI(
    void * handle);

int IoReadAVIPicture(
    void * handle,
    int index,
    void * buffer);

이미지를 읽기 위해 기존 비디오 파일을 열려면 다음 함수를 IoOpenAVI() 호출할 수 있습니다. 이 함수는 이미지 시퀀스 파일의 데이터에 액세스하는 함수에 사용될 void * 에 handle 비디오 파일의 데이터에 액세스하는 함수에 사용될 변수 포인터와 매개변수의 파일 이름을 file 매개변수의 이미지 크기에 대한 세 가지 변수 포인터, 그리고 매개변수의 width 및 height 픽셀당 비트 수를 필요로 합니다. bitsPerPixel.

응용 프로그램이 비디오 파일의 데이터 액세스를 완료하면 다음 함수를 IoCloseAVI() should be called.

비디오 파일에서 이미지를 읽으려면 다음 함수를 IoReadAVIPicture() 호출할 수 있습니다. 이 함수는 이전 호출의 핸들을 필요로 하며, IoOpenSeq() 에 handle, 읽을 이미지의 인덱스와 이미지 데이터를 저장할 버퍼에 대한 포인터를 매개변수로 지정하여 buffer전달합니다. 버퍼는 이미지 크기 및 Pixel Format에 따라 이미지 데이터를 저장할 수 있을 만큼 충분히 커야 하며, 예를 들어 다음 함수 호출을 통해 계산할 수 있습니다. IoCalculateBufferSize().

비디오 파일 쓰기#

int IoCreateAVIGray(
    void ** handle,
    const char * file,
    int width,
    int height,
    double fps);

int IoCreateAVIGrayW(
    void ** handle,
    const LPCWSTR file,
    int width,
    int height,
    double fps);

int IoCreateAVIColor(
    void ** handle,
    const char * file,
    int width,
    int height,
    double fps);

int IoCreateAVIColorW(
    void ** handle,
    const LPCWSTR file,
    int width,
    int height,
    double fps);

int IoCloseAVI(
    void * handle);

int IoWriteAVIPicture(
    void * handle,
    int index,
    const void * buffer);

이미지를 기록할 새 비디오 파일을 생성하려면 다음 함수 중 하나를 IoCreateAVIGray(), IoCreateAVIGrayW(), IoCreateAVIColor() 또는 IoCreateAVIColorW() 호출할 수 있습니다. 이 함수들은 해당 타입의 변수 포인터를 void * 에 handle 비디오 파일의 데이터에 액세스하는 함수에 사용될 변수 포인터와 매개변수의 파일 이름을 file매개변수의 이미지 크기 및 width 및 height 그리고 매개변수로 초당 프레임 수를 fps요구합니다. Pixel Format은 다음과 같은 함수 변형에 따라 결정됩니다. IoCreateAVIGray() 및 IoCreateAVIGrayW() 8비트 흑백 이미지 데이터를 위한 비디오 파일을 생성하며, IoCreateAVIColor() 및 IoCreateAVIColorW() 24비트 RGB 이미지 데이터를 위한 파일을 생성합니다. 끝에 다음이 붙는 변형은 W 와이드 문자열을 사용하는 파일 이름을 허용합니다.

응용 프로그램이 비디오 파일의 데이터 액세스를 완료하면 다음 함수를 IoCloseAVI() should be called.

비디오 파일에 이미지를 기록하려면 IoWriteAVIPicture() 함수를 호출할 수 있습니다. 이 함수는 매개변수로 비디오 파일 생성 함수를 이전 단계에서 호출했을 때 얻은 핸들을 요구하며, handle매개변수로는 비디오 시퀀스 내 이미지의 인덱스를 요구합니다. index 매개변수의 이미지 데이터를 포함하는 버퍼에 대한 포인터를 buffer전달합니다. 버퍼는 이미지 크기 및 Pixel Format에 따라 이미지 데이터를 제공할 수 있을 만큼 충분히 커야 하며, 예를 들어 다음 함수 호출을 통해 계산할 수 있습니다. IoCalculateBufferSize().

이미지 시퀀스 파일에서 비디오 파일 생성#

int IoSeqCreateAvi(
    void * handle,
    const char * file,
    int fromSeqIndex,
    int toSeqIndex);

함수 IoSeqCreateAvi() 기존 이미지 시퀀스 파일로부터 비디오 파일을 생성하기 위해 호출할 수 있습니다. 이 함수는 이전 호출에서 얻은 핸들을 IoOpenSeq() 에 handle매개변수로, 생성할 비디오 파일의 파일 이름을 file 매개변수로, 그리고 비디오 파일에 포함할 이미지 시퀀스 파일의 첫 번째 및 마지막 시퀀스 인덱스를 fromSeqIndex 및 toSeqIndex매개변수로 요구합니다. 값 -1이 매개변수에 전달되는 경우 toSeqIndex, 다음부터 시작하는 이미지 시퀀스 파일의 모든 이미지가 fromSeqIndex 비디오 파일에 포함됩니다.