27 lines
1.2 KiB
C++
27 lines
1.2 KiB
C++
#include "runner_mask_output.h"
|
|
#include <cassert>
|
|
#include <vector>
|
|
#include <sstream>
|
|
#include <iterator>
|
|
|
|
int main() {
|
|
unsigned char data[]={255,0,99, 0,255,99}; // Padded rows; preserve holes.
|
|
yolo_mask_view_v1_t mask{};mask.data=data;mask.width=mask.height=2;
|
|
mask.row_stride_bytes=3;mask.origin_x=1;mask.origin_y=1;
|
|
std::vector<unsigned char> image(4*4*4,100);
|
|
assert(runner_mask_output::blend(image.data(),4,4,16,4,mask,0));
|
|
assert(image[20]==61 && image[21]==147 && image[22]==108 && image[23]==100);
|
|
assert(image[24]==100 && image[36]==100 && image[40]!=100);
|
|
auto invalid=mask;invalid.origin_x=4;
|
|
assert(!runner_mask_output::blend(image.data(),4,4,16,4,invalid,0));
|
|
const auto path=std::filesystem::temp_directory_path()/"yolo-instance-mask-contract.pgm";
|
|
assert(runner_mask_output::save(path,mask));
|
|
std::ifstream file(path,std::ios::binary);
|
|
std::vector<unsigned char> bytes((std::istreambuf_iterator<char>(file)),{});
|
|
const std::string header="P5\n2 2\n255\n";
|
|
assert(bytes.size()==header.size()+4);
|
|
assert(std::equal(header.begin(),header.end(),bytes.begin()));
|
|
assert(bytes[header.size()]==255 && bytes[header.size()+1]==0 && bytes.back()==255);
|
|
file.close();std::filesystem::remove(path);
|
|
}
|