콘텐츠로 이동

Opencv.h

Go to the source code of this file.

OpenCV 라이브러리를 사용하여 이미지를 처리하고 이를 검사하는 예제를 보여줍니다.

Examples 프로젝트에 빌드에서 제외한 ExampleClsRuntimeOpencv.cpp 파일에 대한 설명입니다. 본 예제 소스 파일은 ExampleClsRuntime.cpp 의 OpenCV 버전입니다. 제공되는 Examples 프로젝트에는 OpenCV 라이브러리가 포함되어 있지 않습니다. 따라서, 빌드에서 제외되어 있으며 OpenCV 라이브러리를 불러오는 프로젝트 설정 방법은 다루지 않습니다.

이미지 불러오기

OpenCV의 imread 함수를 사용하여 이미지를 불러올 수 있습니다. 이미지의 height, width, channel 정보를 확인합니다.

201
202
203
204
205
206
207
208
209
210
// ExampleClsRuntimeOpencv.cpp:203

cv::Mat cvImage = cv::imread(img, cv::IMREAD_UNCHANGED);
if (cvImage.empty()) {
    std::cerr << "cv::imread() failed - " << img << std::endl;
    continue;
}
h = cvImage.rows;
w = cvImage.cols;
c = cvImage.channels();

그 다음, Infer 함수에 입력하기 위한 이미지 플래그 값을 설정합니다.

  • 먼저 OpenCV의 채널 순서는 BGR입니다.
  • 채널 수가 3인 경우 SAIGE_IMAGE_COLOR 플래그를 추가합니다.
  • 채널 수가 4인 경우 SAIGE_IMAGE_COLOR, SAIGE_IMAGE_ALPHA 플래그를 추가합니다.
  • 16비트 이미지인 경우 SAIGE_IMAGE_16BIT 플래그를 추가합니다.
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
// ExampleClsRuntimeOpencv.cpp:213

unsigned int imageFlag = SAIGE_IMAGE_BGR; // cv 기본 BGR
if (c == 3) {
    imageFlag |= SAIGE_IMAGE_COLOR;
} else if (c == 4) {
    imageFlag |= SAIGE_IMAGE_COLOR | SAIGE_IMAGE_ALPHA;
}  else {
    std::cerr << "Unsupported image channel: " << c << std::endl;
    continue;
}
type = cvImage.type();
if (type == CV_16UC1 || type == CV_16UC3 || type == CV_16UC4) {
    // 16bit depth image
    imageFlag |= SAIGE_IMAGE_16BIT;
}

검사 함수 호출하기

cv::Mat의 data 멤버를 사용하여 이미지 데이터를 입력합니다. 이후, 나머지는 모두 동일하며 유틸 함수의 시각화 함수 대신 OpenCV의 함수를 사용하여 결과를 시각화할 수 있습니다.

236
237
238
239
240
241
242
243
// ExampleClsRuntimeOpencv.cpp:238

retval = SaigeInferFromByteArray(handle, cvImage.data, w, h, imageFlag, result);
if (retval < 0) {
    std::cerr << "SaigeInferFromByteArray() failed - " << SaigeStrError(retval)
              << std::endl;
    continue;
}