我想将我提取的字符位图(.bmp文件)提供给某些矩阵,这些矩阵可以用C ++处理,然后输入人工神经网络,例如:网络将采用72个输入 - 每个输入作为尺寸为6 x 12的二值化图像的像素。
例如:我有一个大小的二进制位图,比方说40 x 80.我想用它制作一个尺寸为6 x 12的结构,它将由我的缩放位图组成。所以我需要一个位图库,它允许我缩放bmps然后将它们输入ANN。 (正如你们中的一些人已经说过的那样,它们将被存储为一个非常好的矩阵,因此不需要进行任何转换)
我可以在这里使用什么?
答案 0 :(得分:2)
似乎任何图像处理库都可以满足您的需求。所以,我的建议是使用尽可能简单的库来集成到您的构建过程中。 在这种情况下,CImg库对我们来说非常容易,因为它由一个简单的.h文件组成。
关于您的需求,可能的实施方式是
#include "CImg.h"
using namespace cimg_library;
int main(int argc,char **argv)
{
CImg<unsigned char> image("img/logo.bmp");
//Simple resize with nearest neighbour interpolation
//image = image.resize(64, 64);
//If you want to specify the interpolation type
image = image.resize(64, 64, -100, -100, 4);//The last param specifies the interpolation type
//\param interpolation_type Method of interpolation :
// -1 = no interpolation : raw memory resizing.
// - 0 = no interpolation : additional space is filled according to \p border_condition.
// - 1 = nearest-neighbor interpolation.
// - 2 = moving average interpolation.
// - 3 = linear interpolation.
// - 4 = grid interpolation.
// - 5 = bicubic interpolation.
// - 6 = lanczos interpolation.
CImgDisplay main_disp(image,"Image resized");
//This last part of code is not usfeul for you, it is only used to display the resized image
while (!main_disp.is_closed() )
main_disp.wait();
return 0;
}
答案 1 :(得分:0)
位图文件格式(参见the specs)已经将位图存储为矩阵,或者更确切地说是像素阵列,可以按行(或列,但无关紧要)划分为2D阵列。
因此,您只需阅读标题并获取图像大小,然后读取打包struct
数组中的数据(没有填充,如here所述)。
通过这种方式,您将得到矩阵,然后可以将其包装在类中以存储宽度和高度属性,甚至可以将数组赋予个人风格矩阵的构造函数。
答案 2 :(得分:0)
使用某种bmp lib来访问数据(取决于平台)。这通常会将bmp作为平面数组。获取该平面数组并将每个值插入矩阵结构中,或将其直接传递到NN代码中。没有更多信息,不能为您提供更多。