// STL includes #include #include #include // Utils includes #include #include // Blackborder includes #include "blackborder/BlackBorderProcessor.h" using namespace hyperion; ColorRgb randomColor() { const uint8_t randomRedValue = uint8_t(rand() % (std::numeric_limits::max() + 1)); const uint8_t randomGreenValue = uint8_t(rand() % (std::numeric_limits::max() + 1)); const uint8_t randomBlueValue = uint8_t(rand() % (std::numeric_limits::max() + 1)); return {randomRedValue, randomGreenValue, randomBlueValue}; } Image createImage(unsigned width, unsigned height, unsigned topBorder, unsigned leftBorder) { Image image(width, height); for (unsigned x=0; x ( height - topBorder ) || x < leftBorder || x > (width - leftBorder) ) { image(x,y) = ColorRgb::BLACK; } else { image(x,y) = randomColor(); } } } return image; } int main() { // unsigned unknownCnt = 600; unsigned borderCnt = 50; // unsigned blurCnt = 0; QJsonObject config; // BlackBorderProcessor processor(unknownCnt, borderCnt, blurCnt, 3, config); BlackBorderProcessor processor(config); // Start with 'no border' detection Image noBorderImage = createImage(64, 64, 0, 0); for (unsigned i=0; i<10; ++i) { bool newBorder = processor.process(noBorderImage); if (i == 0) { // Switch to 'no border' should immediate if (!newBorder) { std::cerr << "Failed to detect 'no border' when required" << std::endl; exit(EXIT_FAILURE); } } else { if (newBorder) { std::cerr << "Incorrectly detected new border, when there in none" << std::endl; exit(EXIT_FAILURE); } } } // Verify that the border is indeed if (processor.getCurrentBorder().unknown != false || processor.getCurrentBorder().horizontalSize != 0 || processor.getCurrentBorder().verticalSize != 0) { std::cerr << "Incorrectlty identified 'no border'" << std::endl; exit(EXIT_FAILURE); } int borderSize = 12; Image horzImage = createImage(64, 64, borderSize, 0); for (unsigned i=0; i vertImage = createImage(64, 64, 0, borderSize); for (unsigned i=0; i