我想计算图像中的粒子数量。 我发现ImageJ正是我需要的http://imagej.net/Particle_Analysis,但它只是Java,它只是我需要集成的功能之一,因此从我的C ++应用程序调用Java程序毫无价值。 我正在寻找一个实现这个的C ++库,任何综合算法都非常受欢迎。 一切顺利
答案 0 :(得分:1)
看一下openCV http://opencv.org/。它们具有与计算机视觉相关的大量功能和算法。根据图像中粒子的形状和结构,SimpleBlobDetector()可能有用,也可能没用。这里有一个很好的教程:https://www.learnopencv.com/blob-detection-using-opencv-python-c/。
另外你可以尝试实现自己的算法吗?搜索高斯核拉普拉斯算子。如果你的颗粒是不规则的形状,它可能会变得更加困难,需要进行阈值处理和修复。
答案 1 :(得分:1)
我认为 CImg 对您来说是一个很好的解决方案 - 它是here。它是单个C ++头文件 - 没有库或任何链接,它几乎可以在任何平台上运行 - Linux,OS X,Windows。
您需要的功能是label()
。这是一个简短的例子:
#include <iostream>
#include "CImg.h"
using namespace std;
using namespace cimg_library;
int main(int argc, char** const argv)
{
CImg<int> img("input.png");
img.label(0,0);
img.save_png("result.png");
}
我在命令行中使用 ImageMagick 制作了一个测试图像:
convert -size 1000x1000 xc:black -fill white \
-draw "rectangle 10,10 50,50" \
-draw "rectangle 100,200 300,400" \
-draw "rectangle 800,25 900,900" input.png
看起来像这样:
然后,当你运行程序时,它会用越来越多的数字标记每个blob(即矩形),即每个blob都比最后一个更亮。