2013-08-21 16:25:27 +02:00
|
|
|
|
|
|
|
#pragma once
|
|
|
|
|
|
|
|
// Utils includes
|
|
|
|
#include <utils/RgbImage.h>
|
|
|
|
|
2013-08-23 07:08:44 +02:00
|
|
|
namespace hyperion
|
2013-08-21 16:25:27 +02:00
|
|
|
{
|
2013-08-21 16:52:03 +02:00
|
|
|
///
|
2013-08-23 07:08:44 +02:00
|
|
|
/// Result structure of the detected blackborder.
|
2013-08-21 16:52:03 +02:00
|
|
|
///
|
2013-08-23 07:08:44 +02:00
|
|
|
struct BlackBorder
|
2013-08-21 16:25:27 +02:00
|
|
|
{
|
2013-10-27 09:25:02 +01:00
|
|
|
/// Falg indicating if the border is unknown
|
|
|
|
bool unknown;
|
2013-08-21 16:25:27 +02:00
|
|
|
|
2013-10-27 09:25:02 +01:00
|
|
|
/// The size of the detected horizontal border
|
|
|
|
int horizontalSize;
|
2013-08-21 16:25:27 +02:00
|
|
|
|
2013-10-27 09:25:02 +01:00
|
|
|
/// The size of the detected vertical border
|
|
|
|
int verticalSize;
|
2013-08-23 18:24:10 +02:00
|
|
|
|
|
|
|
///
|
|
|
|
/// Compares this BlackBorder to the given other BlackBorder
|
|
|
|
///
|
|
|
|
/// @param[in] other The other BlackBorder
|
|
|
|
///
|
|
|
|
/// @return True if this is the same border as other
|
|
|
|
///
|
|
|
|
inline bool operator== (const BlackBorder& other) const
|
|
|
|
{
|
2013-10-27 09:25:02 +01:00
|
|
|
if (unknown)
|
2013-08-23 18:24:10 +02:00
|
|
|
{
|
2013-10-27 09:25:02 +01:00
|
|
|
return other.unknown;
|
2013-08-23 18:24:10 +02:00
|
|
|
}
|
|
|
|
|
2013-10-27 09:25:02 +01:00
|
|
|
return other.unknown==false && horizontalSize==other.horizontalSize && verticalSize==other.verticalSize;
|
2013-08-23 18:24:10 +02:00
|
|
|
}
|
2013-08-23 07:08:44 +02:00
|
|
|
};
|
2013-08-21 16:25:27 +02:00
|
|
|
|
2013-08-21 16:52:03 +02:00
|
|
|
///
|
2013-08-23 07:08:44 +02:00
|
|
|
/// The BlackBorderDetector performs detection of black-borders on a single image.
|
2013-10-27 09:25:02 +01:00
|
|
|
/// The detector will search for the upper left corner of the picture in the frame.
|
|
|
|
/// Based on detected black pixels it will give an estimate of the black-border.
|
2013-08-21 16:52:03 +02:00
|
|
|
///
|
2013-08-23 07:08:44 +02:00
|
|
|
class BlackBorderDetector
|
|
|
|
{
|
|
|
|
public:
|
|
|
|
///
|
|
|
|
/// Constructs a black-border detector
|
|
|
|
///
|
|
|
|
BlackBorderDetector();
|
2013-08-21 16:25:27 +02:00
|
|
|
|
2013-08-23 07:08:44 +02:00
|
|
|
///
|
|
|
|
/// Performs the actual black-border detection on the given image
|
|
|
|
///
|
|
|
|
/// @param[in] image The image on which detection is performed
|
|
|
|
///
|
|
|
|
/// @return The detected (or not detected) black border info
|
|
|
|
///
|
|
|
|
BlackBorder process(const RgbImage& image);
|
2013-08-21 16:25:27 +02:00
|
|
|
|
2013-08-23 07:08:44 +02:00
|
|
|
private:
|
2013-08-21 16:25:27 +02:00
|
|
|
|
2013-08-23 07:08:44 +02:00
|
|
|
///
|
|
|
|
/// Checks if a given color is considered black and therefor could be part of the border.
|
|
|
|
///
|
|
|
|
/// @param[in] color The color to check
|
|
|
|
///
|
|
|
|
/// @return True if the color is considered black else false
|
|
|
|
///
|
|
|
|
inline bool isBlack(const RgbColor& color)
|
|
|
|
{
|
|
|
|
// Return the simple compare of the color against black
|
|
|
|
return RgbColor::BLACK == color;
|
|
|
|
// TODO[TvdZ]: We could add a threshold to check that the color is close to black
|
|
|
|
}
|
|
|
|
};
|
|
|
|
} // end namespace hyperion
|