跳转至

Opencv.h

Go to the source code of this file.

使用OpenCV库处理图像并检查的示例。

这是从Examples项目中排除的 ExampleClsRuntimeOpencv.cpp文件的说明。 此源文件是ExampleClsRuntime.cpp的OpenCV版本。提供的Examples项目不包括OpenCV库。 因此,它被排除在构建之外,并且不涵盖如何在项目设置中加载OpenCV库。

加载图像

您可以使用OpenCV的imread函数加载图像。检查图像的高度,宽度和通道信息。

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;
}

调用Infer函数

使用cv::Mat的数据成员输入图像数据。之后,一切都是相同的,您可以使用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;
}