C ++加载和循环图像的像素(JPEG格式)

时间:2015-12-08 10:33:46

标签: c++ image loops colors pixel

你好,谢谢你,至少要帮助我。

首先,我需要加载图像然后遍历该图像的所有像素并检查每个像素的颜色。

我从未尝试过乱搞图像或诸如此类的东西。

非常感谢任何帮助。

谢谢。

3 个答案:

答案 0 :(得分:1)

从更大的角度来看,计算骰子上的点数,我会考虑使用ImageMagick - 来自here的名为Magick++的C ++绑定

我会考虑使用" Blob Analysis" " Connected Component Analysis" 来计算点数骰子。

使用这个骰子......

enter image description here

如果我在命令行使用ImageMagick:

convert dice.png     -colorspace gray -threshold 50% \
   -define connected-components:verbose=true         \
   -define connected-components:area-threshold=10    \
   -connected-components 8 -auto-level output.png

<强>输出

Objects (id: bounding-box centroid area mean-color):
  0: 380x362+0+0 189.6,180.0 103867 srgba(255,255,255,1)
  2: 93x92+248+32 293.8,77.5 6743 srgba(0,0,0,1)
  4: 92x93+39+241 84.8,286.7 6741 srgba(0,0,0,1)
  5: 93x93+248+241 293.8,286.8 6738 srgba(0,0,0,1)
  1: 92x92+39+32 84.8,77.5 6736 srgba(0,0,0,1)
  3: 93x93+143+136 189.3,182.1 6735 srgba(0,0,0,1)

你可以看到它找到了5个点(第一个实际上是整个白色图像),我可以在每个点周围放一个红色的盒子,这样你就可以看到它找到了什么:

convert dice.png -stroke red -fill none -strokewidth 1 -draw "rectangle 248,32 341,124" -draw "rectangle 39,241 131,334" -draw "rectangle 248,241 341,334" -draw "rectangle 39,32 131,124" -draw "rectangle 143,136 236,229" result.png

enter image description here

答案 1 :(得分:0)

我认为你可能会使用OpenCV图像处理库。您有一个详细的安装VS2013的手册: OpenCV installation for Visual Studio 2013

安装后。您将获得许多图像处理功能,包括您正在寻找的功能。

例如:

Mat inputImage = imread(filename, CV_LOAD_IMAGE_COLOR);

然后: Cycle through pixels with opencv

答案 2 :(得分:0)

您可以使用的方法之一是将文件解释为二进制文件。如果你知道如何解释标题部分并知道图像具有什么颜色深度(标题有这样的信息),那么它不会只是比较二进制或十六进制颜色代码 - 可能是十六进制的,因为C ++没有内置的二进制文件变量

如果您认为自己无法处理二进制文件并需要使用库,请参阅 How do I read JPEG and PNG pixels in C++ on Linux?

编辑 - 或者只使用任何图像处理库,例如http://cimg.eu,因为目标似乎是对图像中骰子的解释。