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