0

给定大小为 26 * 7 的图像是否有可能在 Mat 的每一行中包含 78,77 或 79 个值?为什么会这样?我有 95 张图片,所有图片都是 26 x 7,我发现有些图片每行有 77 个单独的颜色值,其他有 79 个。这是有问题的,因为我需要一个标准值。

这就是如何将图像裁剪为 26 x 7 的大小。

Mat standard_size=largestObject1(Rect(0,0,26,7));//a template to get the standard _size of a binary image
cv::resize(thresholdi,thresholdi,standard_size.size());

如果我只能将其转换为 26 个像素值,我会丢失信息吗?

I create the following code:-

    ofstream in("Eye_Gestures.txt");
    //Eye Graze Class
     IplImage *img2 = cvLoadImage("eye2.bmp");
     Mat imgg2=cvarrToMat(img2);
     Formatted line0i2 = format(imgg2.row(0),"CSV" ); 
     Formatted line1i2 = format(imgg2.row(1),"CSV" ); 
     Formatted line2i2 = format(imgg2.row(2),"CSV" );
     Formatted line3i2 = format(imgg2.row(3),"CSV" ); 
     Formatted line4i2 = format(imgg2.row(4),"CSV" );
     Formatted line5i2 = format(imgg2.row(5),"CSV" ); 
     Formatted line6i2 = format(imgg2.row(6),"CSV" );

     in<<line0i2<<", "<<line1i2<<", "<<line2i2<<", "<<line3i2<<", "<<line4i2<<", "<<line5i2<<", "<<line6i2<<", "<<EyeGraze<<endl;

我需要确保每行为所有 95 个图像存储相同数量的单独颜色值。如果它是 77 个值,则每个图像的所有行都需要为 77。如何确保我通过 77 而不是 78或文本文件中的 79 个值?如何忽略每行的多余值?如何跟踪一行上的单独颜色值而无需手动计算它们?

4

2 回答 2

1

26 x 7 像素的图像包含 7 行,每行 26 像素。不会有 27 个,更不用说一行 77 个像素了。你完全糊涂了。

回过头来重新思考你真正想要实现的目标。请注意,文本文件不是图像文件的自然格式。

于 2013-09-10T08:02:20.013 回答
0

位图 (bmp)图像的 每个像素恰好包含 1 个条目。根据您使用的位图类型,这些可能具有不同(但始终不变)的分辨率。

您用于将 bmp 转换为 csv 文本表示的方法似乎将每个像素序列化为一组 3 个值(可能是 rgb)。如果在宽度为 26 像素的图像中,每行的条目数与 78 不同,则很可能在读取文件时犯了一些错误。

常见的错误是将 0 值表示为空单元格“,”,或者 - 根据您使用的语言环境 - 十进制逗号字符和 csv 分隔符之间的混淆。

您确定分隔符确实是','您在写入混淆命名的输出流时用于分隔行的字符in吗?

于 2013-09-10T09:47:56.373 回答