콘텐츠로 건너뛰기

iolibrt#

iolibrt 라이브러리는 널리 사용되는 이미지 포맷을 로드하고 저장하는 기능을 제공합니다. Windows에서 이 라이브러리는 이미지 시퀀스를 로드하거나 저장하는 기능도 지원합니다. .avi 동영상 파일.

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

#include <sisoIo.h>

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

iolibrt의 Error Handling#

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

본 문서의 나머지 부분에 나오는 코드 예제에는 응용 프로그램의 요구 사항에 따라 달라지는 에러 처리가 포함되어 있지 않습니다. 가능한 한 함수가 성공적으로 실행되었는지 확인하기 위해 return codes을 확인합니다.

이미지 파일 작업#

이 이미지 입출력 라이브러리는 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. raw 데이터

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

이미지 파일 열기#

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로 설정됨.

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

이미지 데이터의 크기와 데이터 포맷을 가져오려면 다음 함수들을 사용합니다. 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로 시작하고, 모든 연속적인 이미지가 시퀀스에 기록되지 않은 경우 시퀀스에 프레임 번호의 공백이 포함될 수 있습니다.

이미지 시퀀스 파일에 대해 정의된 표준 파일 확장자는 없으며, 권장되는 선택 사항은 다음과 같습니다. .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() 을(를) 호출해야 합니다.

이미지 시퀀스 파일에서 다음 이미지를 읽으려면 다음 함수를 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() 을(를) 호출해야 합니다.

이미지 시퀀스 파일에 다음 이미지를 추가하려면 다음 함수를 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() 을(를) 호출해야 합니다.

비디오 파일에서 이미지를 읽어오려면, 해당 함수는 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() 을(를) 호출해야 합니다.

비디오 파일에 이미지를 기록하려면, 해당 함수는 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 비디오 파일에 포함됩니다.