C ++,如何加载图像和计算某些颜色的像素

时间:2010-10-01 00:18:24

标签: c++ image devil

这是我的问题:

我正在寻找一种方法将图像导入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);

有没有人有关于从哪里开始的一些提示?

由于

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

EDIT2 除了实际找出当前像素的颜色外,我已经完成了所有工作。目前我正在使用它:

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

但它不起作用,我不知道它是如何工作的。我无法找到任何可以理解的内容。有人能指出我如何找到某个像素的RGB值吗?

EDIT3 完成!对于那些发现这个尝试做类似事情的人,我可以找到大部分剩余的问题和相当多的代码here。谢谢你的帮助!

4 个答案:

答案 0 :(得分:2)

你应该看看OpenCV。

答案 1 :(得分:0)

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

答案 2 :(得分:0)

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

http://www.libsdl.org/

它也很干净。

答案 3 :(得分:0)

明确地看一下OpenCV因为当你开始需要更多的移动空间时,OpenCV会让你做更多的计算机视觉任务。并使用boost::filesystem为dir'代码中的每个图片执行'。

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