给定大小为 26 * 7 的图像是不是有可能在 Mat 的每一行中包含 78 个单独的颜色值,而另一个可以包含 77?

Posted

技术标签:

【中文标题】给定大小为 26 * 7 的图像是不是有可能在 Mat 的每一行中包含 78 个单独的颜色值,而另一个可以包含 77?【英文标题】:Is it possible that an image of a given size of 26 * 7 can contain 78 separate colour values in each row of the Mat ,and another can contain 77?给定大小为 26 * 7 的图像是否有可能在 Mat 的每一行中包含 78 个单独的颜色值,而另一个可以包含 77? 【发布时间】:2013-09-10 07:56:12 【问题描述】:

给定大小为 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 值?如何忽略每一行的多余值?如何在无需手动计算的情况下跟踪一行中的单独颜色值?

【问题讨论】:

您是如何发现这些偏差的?通过手动计算 CSV 条目?很可能你只是在某个地方算错了。 而且我假设您所说的值的数量是单独的颜色值,对于没有 alpha 通道的图像,这将是 26*3 = 78。 是的,我指的是单独的颜色值。您对 26*3 给我 78 的图像是正确的。我认为这可能必须处理我存储图像的格式。我将它们存储为 bmp。哪种格式仅将 26 个单独的颜色值存储到文本文件中。我使用这些值有用于神经网络的训练样本。 一个 bmp 为每个像素存储 3 个值。我不知道每个像素只使用一个值的任何格式(但也许有一些古老的灰度格式?)。你到底想做什么? 我为我的训练样本创建了 95 个 bmp 图像,我将使用这些图像来训练我的 ANN(神经网络)。我将 Mat 的每一行存储在文本文件的一行中,下一个属性将是我的类标签。对于文本文件中的每一行,我严格要求各个属性,并使用 data.at(linet, attribute) = tmpf 将其存储在单个浮点向量中。最后一个属性将存储到另一个包含类值。知道值的数量并且它是一致的非常重要。 【参考方案1】:

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

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

【讨论】:

【参考方案2】:

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

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

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

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

【讨论】:

在保存图像之前,它包含并针对默认格式和 CSV 格式的每个像素精确显示 1 个条目。加载保存的图像时,即使显示默认格式不是 CSV,每个像素都是表示为一组 3 个值 RGB。 RGB值相等。然后我以png格式存储图像,发生相同的情况。保存后如何为每个像素获取1个条目。 Mat imgg=cv::imread("eye.bmp",CV_LOAD_IMAGE_UNCHANGED); CV_LOAD_IMAGE_UNCHANGED (docs.opencv.org/doc/tutorials/introduction/display_image/…。感谢 Hulk 的帮助,非常感谢。学习了很多。

以上是关于给定大小为 26 * 7 的图像是不是有可能在 Mat 的每一行中包含 78 个单独的颜色值,而另一个可以包含 77?的主要内容,如果未能解决你的问题,请参考以下文章

为啥 imageview 不显示与给定大小相同的图像?

检测给定页面使用的外部资源和文件大小

2021-10-26:给定一个数组arr,arr[i] = j,表示第i号试题的难度为j。给定一个非负数M。想出一张卷子,对于任何相邻的两道题目,前一题的难度不能超过后一题的难度+M。返回所有可能的卷

调整图像大小和裁剪图像

PHP GD - 调整图像框架/画布的大小,但不是实际图像

表格中的右图未调整大小