【问题标题】:C++, how to load images and count pixels of certain coloursC ++,如何加载图像并计算某些颜色的像素
【发布时间】:2010-10-04 14:17:44
【问题描述】:

这是我的问题:

我正在寻找一种方法将图像导入 C++,然后遍历其像素,每次找到某种颜色的像素时递增一个计数器。

我进行了一些研究,但没有发现任何特别有用的东西。 DevIL 看起来是个不错的选择,但我不知道从哪里开始。

这是一些 C++/python 伪代码,希望能说明我正在尝试做的事情:

for image in folder:

    A = 0;
    B = 0;

    for pixel in image:

        if (pixel == colourA) {A++}
        if (pixel == colourB) {B++}

    //Output the count of colours for each image
    outputToFile(A, B);

有人对从哪里开始有一些提示吗?

谢谢

编辑 一些额外信息:我使用的是 Windows 7,所有图像都是 .pngs

EDIT2 除了实际找出当前像素的颜色外,我一切正常。目前我正在使用这个:

int blue = ((uchar *)(img->imageData + pixelX*img->widthStep))[pixelY*img->nChannels + 0];

但它不起作用,我不知道它是如何工作的。我还没有找到任何我能理解的东西。谁能指出我如何找到某个像素的 RGB 值的正确方向?

编辑3 完毕!对于任何发现这试图做类似事情的人,我剩下的大部分问题和相当多的代码都可以在here 找到。感谢您的帮助!

【问题讨论】:

  • 您正在尝试计算(部分)直方图。您的普通图形库应该能够为您做到这一点(至少是 imagemagick)。

标签: c++ image devil


【解决方案1】:

你应该看看 OpenCV。

【讨论】:

    【解决方案2】:

    一定要看看OpenCV,因为当您开始需要更多移动空间时,OpenCV 会让您完成更多计算机视觉任务。并使用boost::filesystem 执行'for each image in dir' 代码。

    请注意,cv::compare 函数基本上已经为您完成了一半的工作......我会让您阅读并享受利用 OpenCV API 的乐趣。

    【讨论】:

      【解决方案3】:

      取决于平台和图像格式。在 Windows 中,原生支持 BMP 图像(即在 API 中)。 ImageMagick 是一个跨平台的库,非常通用,可以接受任何格式,但它很重。 Qt 也有一些图像处理功能 - 仅限于最常见的格式。

      【讨论】:

        【解决方案4】:

        SDL 有一些有用的像素处理功能。

        http://www.libsdl.org/

        也很干净。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2015-04-19
          • 2012-02-08
          • 2011-08-20
          • 2016-07-03
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多