首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >C/C++ LIBTIFF:需要从BW TIFF文件中读取白色和黑色像素的像素位置

C/C++ LIBTIFF:需要从BW TIFF文件中读取白色和黑色像素的像素位置
EN

Stack Overflow用户
提问于 2012-07-10 08:04:14
回答 1查看 1.4K关注 0票数 0

我对使用Visual进行图像处理相当陌生,我正在寻找一种读取黑白TIFF文件并将图像写入表示0或1的数组十六进制值的方法,然后获取0(黑色)或1(白色)的位置信息。

在对Google进行了一些研究之后,在这里有一篇关于https://www.ibm.com/developerworks/linux/library/l-libtiff/#resources的文章,我有以下一些琐碎的问题,请告诉我相关的文章,有太多的文章让我无法理解它们,同时我还会继续搜索和阅读。

是否可以使用LIBTIFF从TIFF中提取像素位置信息?

再次,作为所有图像格式的新事物,我不禁认为图像是由二维十六进制值数组组成的,位图格式更合适吗?通过这种方式思考,我想知道我是否可以将“白色”或“黑色”的位置从它的高度映射到一个2D数组上。我想知道“黑”或“白”的位置,这可能吗?我真的不想要一个代表图像的0和1s数组,甚至不确定我是否需要它们。

4x2BW图像的TIFF示例:

  • 黑白
  • 白黑
  • 黑黑
  • 白白

输出到名为mappingNonPrint()的函数下的类似mappingNonPrint()的函数

  • 2 1
  • 4 4

或在名为mappingPrint()的函数下

  • 1 2
  • 3 3

对于LIBTIFF,它读取TIFF文件的方向/方式是什么?

理想情况下,我希望TIFF文件从上到下垂直读取,然后移到下一列,然后从上到下重新开始。但是我的直觉告诉我,这是一个童话故事,对于图像处理来说是非常新的,我想知道TIFF是怎么读的--例如,一个单张的。

更多信息

我想我应该加上为什么我想要像素位置。我试图制作一台圆柱形滚筒打印机,使用光学旋转编码器提供位置反馈文件的高度表示轧辊表面的周长,文件的宽度表示旋转的次数。

下面是我的ENC_reg()的一个非常未经测试的逻辑,它与图像处理部分几乎没有关系,但这可能有助于读者了解我试图对tiff图像的处理数组做什么。我被索引从0到imageHeight,但是,每个元素可能是一个任意数字,从0到imageHeight,可以是112,354等等,它对应于在tiff图像中包含黑色的任何位置。J从0索引到imageWidth,其中的每个元素也从0开始到imageWidth。例如,ptLocArray1意味着第一个在列2中有一个黑色像素的位置,那里存储的值可能是231。从第2列顶部开始的231像素计数。

我意识到arrayimageHeight应该是arraymaxnum_blackPixelPerColumn,但是我不知道如何计算1的数量,或者每个column....because的0,我不知道如何像我前面提到的那样按正确的顺序转换1和0。

代码语言:javascript
复制
void ENC_reg()

{

if(inputPort_ENC_reg == true) // true if received an encoder signal

{ 

            ENC_regTemp ++; // increment ENC register temp value by one each time the port registers a signal

                if(ENC_regTemp == ptLocArray[i][j])
                {
                    Rollprint(); // print it
                    i++; // increment by one to the next height location that indicates a "black", meaning print

                    if (ENC_regTemp == imageHeight)
                    {
                    // Check if end of column reached, end of a revolution
                    j++; // jump to next column of the image (starting next revolution)
                    i = 0; // reset i index to 0, to the top of the next column
                    ENC_regTemp = 0; // reset encoder register temp to 0 for the new revolution
                    };
                };



            ENC_reg(); // recall itself;
        };
    }
EN

Stack Overflow用户

回答已采纳

发布于 2012-07-10 10:10:55

在我阅读您的示例时,您希望图像的每一列都有两个数组,一个包含该列中带有黑色像素的行数,另一个包含带有白色像素的行索引。到目前为止?

这当然是可能的,但需要大量的内存。即使未压缩,灰度图像的单个像素也将占用一个字节的内存。您甚至可以使用位打包,并将8个像素塞进一个字节。另一方面,除非您将自己限制在不超过255行的图像上,否则您将有多个字节来表示每个列索引。你需要额外的逻辑来标记列的结尾。

我的观点是:尝试使用“0和1s数组”,因为这应该更容易完成,内存要求更低,运行效率更高。

票数 1
EN
查看全部 1 条回答
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/11409036

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档