Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/angular/32.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C/C++;LIBTIFF:需要从BW TIFF文件中读取黑白像素的像素位置 我对Visual C++的图像处理比较新颖,我在寻找一种读取黑白TIFF文件的方法,并将图像写入一个代表0或1的数组十六进制值,然后得到0(黑色)或1(白色)的位置信息。p>_C++_Image Processing_Pixel_Tiff - Fatal编程技术网

C/C++;LIBTIFF:需要从BW TIFF文件中读取黑白像素的像素位置 我对Visual C++的图像处理比较新颖,我在寻找一种读取黑白TIFF文件的方法,并将图像写入一个代表0或1的数组十六进制值,然后得到0(黑色)或1(白色)的位置信息。p>

C/C++;LIBTIFF:需要从BW TIFF文件中读取黑白像素的像素位置 我对Visual C++的图像处理比较新颖,我在寻找一种读取黑白TIFF文件的方法,并将图像写入一个代表0或1的数组十六进制值,然后得到0(黑色)或1(白色)的位置信息。p>,c++,image-processing,pixel,tiff,C++,Image Processing,Pixel,Tiff,在对谷歌进行了一些研究并在这里发表了一篇文章之后,我有以下几个小问题,请一定要给我指出相关的文章,它们太多了,我无法理解,同时我会继续搜索和阅读 是否可以使用LIBTIFF从TIFF中提取像素位置信息 对于所有图像格式来说,我还是个新手,我不禁想,图像是由一个十六进制值的2D数组组成的,位图格式更合适吗?这样的想法让我想知道我是否可以将“白色”或“黑色”的位置从其高度映射到2D数组上。我想知道“黑”或“白”的位置,可以吗?我真的不想要一个代表图像的0和1的数组,我甚至不确定是否需要它们 TIFF

在对谷歌进行了一些研究并在这里发表了一篇文章之后,我有以下几个小问题,请一定要给我指出相关的文章,它们太多了,我无法理解,同时我会继续搜索和阅读

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

对于所有图像格式来说,我还是个新手,我不禁想,图像是由一个十六进制值的2D数组组成的,位图格式更合适吗?这样的想法让我想知道我是否可以将“白色”或“黑色”的位置从其高度映射到2D数组上。我想知道“黑”或“白”的位置,可以吗?我真的不想要一个代表图像的0和1的数组,我甚至不确定是否需要它们

TIFF 4×2 BW图像的示例:

  • 黑白
  • 黑白
  • 黑黑的
  • 白白
在名为mappingNonPrint()的函数下输出到类似ptlocaray[imageHeight][imageWidth]的内容

  • 2.1
  • 4.4
或者在名为mappingPrint()的函数下

  • 1 2
  • 3 3
使用LIBTIFF,它以什么方向/方式读取TIFF文件

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

附加信息 我想我应该添加为什么我需要像素位置。我正在尝试制作一台圆筒形滚筒打印机,使用一个提供位置反馈的光学旋转编码器。文档的高度表示滚筒表面的周长,文档的宽度表示转数

下面是我的ENC_reg()的一个未经测试的逻辑,与图像处理部分几乎无关,但这可能有助于读者了解我试图对处理后的tiff图像数组执行的操作。i是从0到imageHeight的索引,但是,每个元素可以是从0到imageHeight的任意数字,可以是112、354等,对应于tiff图像中包含黑色的任何位置。j的索引从0到imageWidth,其中的每个元素也从0开始到imageWidth。例如,ptlocaray[1][2]表示在第2列中具有黑色像素的第一个位置,存储在那里的值可以是231。从第2列顶部开始计数的第231个像素

我意识到数组[imageHeight][]应该改为数组[maxnum_blackPixelPerColumn],但我不知道如何计算每列1或0的数量……因为我不知道如何按照我前面提到的正确顺序转换1和0

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;
        };
    }

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

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


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

感谢您的回复,我实际上只想要一个2d数组,格式为存储像素位置数据:数组[imageHeight][imageWidth]每列一个数组,或者一个二维数组,在概念上没有什么区别,是吗?还是我在这里漏掉了一点?是的,确实是每列一个数组。我试图实现的是获取BW tiff图像的“白色”或“黑色”的像素位置,而不是两者。我的应用程序的目的不是重建图像或图像处理,由0和1组成的数组似乎是多余的(顶部的附加信息可能会有所帮助)。谢谢你,如果我看起来很固执,请原谅。