Одна неприятная деталь, которую я увидел в моем тестовом коде: обратите внимание на строку импорта - она не отображается в большинстве примеров и должна быть правильной.
Мой тестовый код использовал только приведенный выше пример putText, и я включил imgproc.h точно так же, как и в мой старый код. Код скомпилирован и скомпонован нормально, однако я столкнулся с одним странным поведением с putText (мусор в моем изображении).
Это была PITA, пока я не понял, что импорт портит мою социальную жизнь ...
imageText.cpp
#include "Imaging/imageText.h"
#include "Commons/xLog.h"
#include "opencv2/imgproc.hpp" // << Seems to work right?
using namespace cv;
namespace imaging
{
inline Mat image2mat( SmartImage image ) NOEXCEPTION
{
//TODO: hard coded to work only with CV_8UC3, see the other cases ...
Mat mat(
Size( image->WIDTH, image->HEIGHT ),
CV_8UC3,
image->buffer,
Mat::AUTO_STEP
);
return mat;
}
inline void _writeText_( SmartImage image, const string TEXT )
{
Mat mat( image2mat( image ) );
string text = "Funny text inside the box";
int fontFace = FONT_HERSHEY_SCRIPT_SIMPLEX;
double fontScale = 2;
int thickness = 3;
Point textOrg( 10, 130 );
putText( mat, text, textOrg, fontFace, fontScale, Scalar::all( 255 ), thickness, 8 );
}
const bool writeText( SmartImage image, const string text ) NOEXCEPTION
{
try
{
_writeText_( image, text );
return true;
}
catch( cv::Exception& e )
{
LOG_ERROR( "writeText OpenCV ERROR: " << e.what() << "!" );
}
catch( ... )
{
LOG_ERROR( "writeText ERROR!" );
}
return false;
}
}
Тогда я просто изменил импорт imgproc выше на
#include <opencv2/opencv.hpp> // << It does includes ALL opencv stuff
Мои 5 центов.