本文整理汇总了C++中ImageAccessor类的典型用法代码示例。如果您正苦于以下问题:C++ ImageAccessor类的具体用法?C++ ImageAccessor怎么用?C++ ImageAccessor使用的例子?那么, 这里精选的类代码示例或许可以为您提供帮助。
在下文中一共展示了ImageAccessor类的15个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。
示例1: ConvertColorToGrayscale
static void ConvertColorToGrayscale(ImageAccessor& target,
const ImageAccessor& source)
{
assert(source.GetFormat() == PixelFormat_RGB24);
const TargetType minValue = std::numeric_limits<TargetType>::min();
const TargetType maxValue = std::numeric_limits<TargetType>::max();
for (unsigned int y = 0; y < source.GetHeight(); y++)
{
TargetType* t = reinterpret_cast<TargetType*>(target.GetRow(y));
const uint8_t* s = reinterpret_cast<const uint8_t*>(source.GetConstRow(y));
for (unsigned int x = 0; x < source.GetWidth(); x++, t++, s += 3)
{
// Y = 0.2126 R + 0.7152 G + 0.0722 B
int32_t v = (2126 * static_cast<int32_t>(s[0]) +
7152 * static_cast<int32_t>(s[1]) +
0722 * static_cast<int32_t>(s[2])) / 1000;
if (static_cast<int32_t>(v) < static_cast<int32_t>(minValue))
{
*t = minValue;
}
else if (static_cast<int32_t>(v) > static_cast<int32_t>(maxValue))
{
*t = maxValue;
}
else
{
*t = static_cast<TargetType>(v);
}
}
}
}
示例2: ShiftScaleInternal
void ShiftScaleInternal(ImageAccessor& image,
float offset,
float scaling)
{
const float minValue = static_cast<float>(std::numeric_limits<PixelType>::min());
const float maxValue = static_cast<float>(std::numeric_limits<PixelType>::max());
for (unsigned int y = 0; y < image.GetHeight(); y++)
{
PixelType* p = reinterpret_cast<PixelType*>(image.GetRow(y));
for (unsigned int x = 0; x < image.GetWidth(); x++, p++)
{
float v = (static_cast<float>(*p) + offset) * scaling;
if (v > maxValue)
{
*p = std::numeric_limits<PixelType>::max();
}
else if (v < minValue)
{
*p = std::numeric_limits<PixelType>::min();
}
else
{
*p = static_cast<PixelType>(boost::math::iround(v));
}
}
}
}
示例3: ToMatlabStringInternal
static void ToMatlabStringInternal(ChunkedBuffer& target,
const ImageAccessor& source)
{
target.AddChunk("double([ ");
for (unsigned int y = 0; y < source.GetHeight(); y++)
{
const PixelType* p = reinterpret_cast<const PixelType*>(source.GetConstRow(y));
std::string s;
if (y > 0)
{
s = "; ";
}
s.reserve(source.GetWidth() * 8);
for (unsigned int x = 0; x < source.GetWidth(); x++, p++)
{
s += boost::lexical_cast<std::string>(static_cast<double>(*p)) + " ";
}
target.AddChunk(s);
}
target.AddChunk("])");
}
示例4: ConvertInternal
static void ConvertInternal(ImageAccessor& target,
const ImageAccessor& source)
{
const TargetType minValue = std::numeric_limits<TargetType>::min();
const TargetType maxValue = std::numeric_limits<TargetType>::max();
for (unsigned int y = 0; y < source.GetHeight(); y++)
{
TargetType* t = reinterpret_cast<TargetType*>(target.GetRow(y));
const SourceType* s = reinterpret_cast<const SourceType*>(source.GetConstRow(y));
for (unsigned int x = 0; x < source.GetWidth(); x++, t++, s++)
{
if (static_cast<int32_t>(*s) < static_cast<int32_t>(minValue))
{
*t = minValue;
}
else if (static_cast<int32_t>(*s) > static_cast<int32_t>(maxValue))
{
*t = maxValue;
}
else
{
*t = static_cast<TargetType>(*s);
}
}
}
}
示例5: AddConstantInternal
static void AddConstantInternal(ImageAccessor& image,
int64_t constant)
{
if (constant == 0)
{
return;
}
const int64_t minValue = std::numeric_limits<PixelType>::min();
const int64_t maxValue = std::numeric_limits<PixelType>::max();
for (unsigned int y = 0; y < image.GetHeight(); y++)
{
PixelType* p = reinterpret_cast<PixelType*>(image.GetRow(y));
for (unsigned int x = 0; x < image.GetWidth(); x++, p++)
{
int64_t v = static_cast<int64_t>(*p) + constant;
if (v > maxValue)
{
*p = std::numeric_limits<PixelType>::max();
}
else if (v < minValue)
{
*p = std::numeric_limits<PixelType>::min();
}
else
{
*p = static_cast<PixelType>(v);
}
}
}
}
示例6: MultiplyConstantInternal
void MultiplyConstantInternal(ImageAccessor& image,
float factor)
{
if (std::abs(factor - 1.0f) <= std::numeric_limits<float>::epsilon())
{
return;
}
const int64_t minValue = std::numeric_limits<PixelType>::min();
const int64_t maxValue = std::numeric_limits<PixelType>::max();
for (unsigned int y = 0; y < image.GetHeight(); y++)
{
PixelType* p = reinterpret_cast<PixelType*>(image.GetRow(y));
for (unsigned int x = 0; x < image.GetWidth(); x++, p++)
{
int64_t v = boost::math::llround(static_cast<float>(*p) * factor);
if (v > maxValue)
{
*p = std::numeric_limits<PixelType>::max();
}
else if (v < minValue)
{
*p = std::numeric_limits<PixelType>::min();
}
else
{
*p = static_cast<PixelType>(v);
}
}
}
}
示例7: GetMinMaxValueInternal
static void GetMinMaxValueInternal(PixelType& minValue,
PixelType& maxValue,
const ImageAccessor& source)
{
// Deal with the special case of empty image
if (source.GetWidth() == 0 ||
source.GetHeight() == 0)
{
minValue = 0;
maxValue = 0;
return;
}
minValue = std::numeric_limits<PixelType>::max();
maxValue = std::numeric_limits<PixelType>::min();
for (unsigned int y = 0; y < source.GetHeight(); y++)
{
const PixelType* p = reinterpret_cast<const PixelType*>(source.GetConstRow(y));
for (unsigned int x = 0; x < source.GetWidth(); x++, p++)
{
if (*p < minValue)
{
minValue = *p;
}
if (*p > maxValue)
{
maxValue = *p;
}
}
}
}
示例8: SetInternal
static void SetInternal(ImageAccessor& image,
int64_t constant)
{
for (unsigned int y = 0; y < image.GetHeight(); y++)
{
PixelType* p = reinterpret_cast<PixelType*>(image.GetRow(y));
for (unsigned int x = 0; x < image.GetWidth(); x++, p++)
{
*p = static_cast<PixelType>(constant);
}
}
}
示例9: ShiftRight
void ImageProcessing::ShiftRight(ImageAccessor& image,
unsigned int shift)
{
if (image.GetWidth() == 0 ||
image.GetHeight() == 0 ||
shift == 0)
{
// Nothing to do
return;
}
throw OrthancException(ErrorCode_NotImplemented);
}
示例10: operator
void operator()(const Mat& mat, char* data) {
ImageAccessor<RGBPixel> acc;
typename Mat::const_row_iterator row = mat.row_begin();
typename Mat::const_col_iterator col;
char* i = data;
for (; row != mat.row_end(); ++row) {
for (col = row.begin(); col != row.end(); ++col) {
RGBPixel tmp = acc.get(col);
*(i++) = (unsigned char)tmp.red();
*(i++) = (unsigned char)tmp.green();
*(i++) = (unsigned char)tmp.blue();
}
}
}
示例11: Set
void ImageProcessing::Set(ImageAccessor& image,
int64_t value)
{
switch (image.GetFormat())
{
case PixelFormat_Grayscale8:
SetInternal<uint8_t>(image, value);
return;
case PixelFormat_Grayscale16:
SetInternal<uint16_t>(image, value);
return;
case PixelFormat_SignedGrayscale16:
SetInternal<int16_t>(image, value);
return;
case PixelFormat_Float32:
assert(sizeof(float) == 4);
SetInternal<float>(image, value);
return;
default:
throw OrthancException(ErrorCode_NotImplemented);
}
}
示例12: ConvertGrayscaleToFloat
static void ConvertGrayscaleToFloat(ImageAccessor& target,
const ImageAccessor& source)
{
assert(sizeof(float) == 4);
for (unsigned int y = 0; y < source.GetHeight(); y++)
{
float* t = reinterpret_cast<float*>(target.GetRow(y));
const SourceType* s = reinterpret_cast<const SourceType*>(source.GetConstRow(y));
for (unsigned int x = 0; x < source.GetWidth(); x++, t++, s++)
{
*t = static_cast<float>(*s);
}
}
}
示例13: RGB24ToMatlabString
static void RGB24ToMatlabString(ChunkedBuffer& target,
const ImageAccessor& source)
{
assert(source.GetFormat() == PixelFormat_RGB24);
target.AddChunk("double(permute(reshape([ ");
for (unsigned int y = 0; y < source.GetHeight(); y++)
{
const uint8_t* p = reinterpret_cast<const uint8_t*>(source.GetConstRow(y));
std::string s;
s.reserve(source.GetWidth() * 3 * 8);
for (unsigned int x = 0; x < 3 * source.GetWidth(); x++, p++)
{
s += boost::lexical_cast<std::string>(static_cast<int>(*p)) + " ";
}
target.AddChunk(s);
}
target.AddChunk("], [ 3 " + boost::lexical_cast<std::string>(source.GetHeight()) +
" " + boost::lexical_cast<std::string>(source.GetWidth()) + " ]), [ 3 2 1 ]))");
}
示例14: histogram_real_values
FloatVector* histogram_real_values(const T& image) {
// The histogram is the size of all of the possible values of
// the pixel type.
size_t l = std::numeric_limits<typename T::value_type>::max() + 1;
FloatVector* values = new FloatVector(l);
// set the list to 0
std::fill(values->begin(), values->end(), 0);
typename T::const_row_iterator row = image.row_begin();
typename T::const_col_iterator col;
ImageAccessor<typename T::value_type> acc;
// create the histogram
for (; row != image.row_end(); ++row)
for (col = row.begin(); col != row.end(); ++col)
(*values)[acc.get(col)]++;
return values;
}
示例15: OrthancException
ImageAccessor ImageAccessor::GetRegion(unsigned int x,
unsigned int y,
unsigned int width,
unsigned int height) const
{
if (x + width > width_ ||
y + height > height_)
{
throw OrthancException(ErrorCode_ParameterOutOfRange);
}
ImageAccessor result;
if (width == 0 ||
height == 0)
{
result.AssignWritable(format_, 0, 0, 0, NULL);
}
else
{
uint8_t* p = (buffer_ +
y * pitch_ +
x * GetBytesPerPixel());
if (readOnly_)
{
result.AssignReadOnly(format_, width, height, pitch_, p);
}
else
{
result.AssignWritable(format_, width, height, pitch_, p);
}
}
return result;
}