我想模糊的图像模糊的图像。在这一点上,我可以模糊它没有边界。我读过我可以通过将数据容器放入更大的数据容器来实现我的目标。我试过了,但是我不能成功地做到这一点。也许有人知道更简单的解决方案来做到这一点这里是我的代码:用纯C++
Image Blur::transform(const Image &inputImage)
{
Image input = (inputImage.type != ImageType::Grayscale)
? Grayscale().transform(inputImage)
: inputImage;
std::cout << "Blurring" << std::endl;
Image output = input;
auto indexAt = [&input](int row, int col) { return row * input.size.m_width + col; };
for (int row = m_BLUR_MASK_RADIUS; row < output.size.m_height - m_BLUR_MASK_RADIUS; row++)
{
for (int col = m_BLUR_MASK_RADIUS; col < output.size.m_width - m_BLUR_MASK_RADIUS; col++)
{
std::vector<uint8_t> pixel_values;
for (int row_offset = -m_BLUR_MASK_RADIUS; row_offset <= m_BLUR_MASK_RADIUS; row_offset++)
{
for (int col_offset = -m_BLUR_MASK_RADIUS; col_offset <= m_BLUR_MASK_RADIUS; col_offset++)
{
const int offset_pixel_index = indexAt(row + row_offset, col + col_offset);
pixel_values.push_back(input.data[offset_pixel_index]);
}
}
const int center_pixel_index = indexAt(row, col);
output.data[center_pixel_index] = getModifiedValue(pixel_values);
}
}
return output;
}
哪里Image
是如下:
struct Image
{
std::vector<uint8_t> data;
Size size;
ImageType type;
int pixelCount() const {
return size.m_height * size.m_width;
}
Image() {}
Image(Size _size, ImageType _type) : size(_size), type(_type) {}
~Image() {}
};
struct Size
{
int m_width;
int m_height;
Size() {}
Size(int width, int height) : m_width(width), m_height(height) {}
};
enum class ImageType
{
Rgba,
Grayscale
};
所以你能帮忙吗?
如果你尝试过,你应该张贴,你写了没有工作的代码。否则,唯一提及并不意味着太多。而且你不需要一个更大的容器来模糊图像,边缘检查条件就可以做到。 –
@BartekBanachewicz上周试了一下。不幸的是,没有该代码已经 – gawron103