Openslide support example.
#include <iostream>
using namespace std;
using ecvl::filesystem::path;
void Performance()
{
path filename("../examples/data/hamamatsu/test3-DAPI 2 (387).ndpi");
int n_test = 100;
vector<double> timings_ecvl(n_test);
vector<double> timings_openslide(n_test);
int n_patches = 100;
int patch_size = 256;
cv::TickMeter tm;
for (int i = 0; i < n_test; ++i) {
tm.reset();
tm.start();
for (int j = 0; j < n_patches * patch_size; j += patch_size) {
os_img.
ReadRegion(img, 0, { j, j, patch_size, patch_size });
}
tm.stop();
timings_ecvl[i] = tm.getTimeMilli();
openslide_t* osr = openslide_open(filename.string().c_str());
vector<uint32_t> d(sizeof(uint32_t) * patch_size * patch_size);
tm.reset();
tm.start();
for (int j = 0; j < n_patches * patch_size; j += patch_size) {
openslide_read_region(osr, d.data(), j, j, 0, patch_size, patch_size);
}
tm.stop();
timings_openslide[i] = tm.getTimeMilli();
}
auto t_ecvl = accumulate(timings_ecvl.begin(), timings_ecvl.end(), 0.) / n_test;
auto t_openslide = accumulate(timings_openslide.begin(), timings_openslide.end(), 0.) / n_test;
cout << "Elapsed mean time ECVL: " << t_ecvl << endl;
cout << "Elapsed mean time OpenSlide: " << t_openslide << endl;
}
int main()
{
filesystem::path filename("../examples/data/hamamatsu/test3-DAPI 2 (387).ndpi");
vector<array<int, 2>> levels;
int n_levels = os_img.GetLevelCount();
os_img.GetLevelsDimensions(levels);
for (int i = 0; i < levels.size(); ++i) {
vector<int> dims = {
0,
0,
levels[levels.size() - 1][0],
levels[levels.size() - 1][1]
};
os_img.ReadRegion(img, i, dims);
os_img.GetProperties(img);
for (
auto& p : img.
meta_) {
cout << p.first << " - " << any_cast<string>(p.second.Get()) << endl;
}
auto mpp_x = img.
GetMeta(
"openslide.mpp-x");
auto roi_slide_macro = img.
GetMeta(
"hamamatsu.roi.slide.macro");
cout << "mpp-x - " << any_cast<string>(mpp_x.Get()) << endl;
ImWrite(
"hamamatsu_level_" + to_string(i) +
".png", img);
cout << "Writing 'hamamatsu_level_" << i << ".png'\n";
}
filename = "../examples/data/hamamatsu/test3-FITC 2 (485).ndpi";
int level = 0;
vector<int> dims = {
1000,
1000,
500,
500
};
os_img_2.ReadRegion(img, level, dims);
cout << "Writing 'hamamatsu_2.png'\n";
Performance();
return EXIT_SUCCESS;
}