C++ C++;图像处理,粒子计数

C++ C++;图像处理,粒子计数,c++,algorithm,image-processing,C++,Algorithm,Image Processing,我想计算图像中粒子的数量。 我发现Image J确实需要我做的事情,但它是java,它只是我需要集成的特性之一,使得从C++应用程序调用java程序是没有价值的。 我正在寻找一个C++库来实现这个,任何综合的算法都是不受欢迎的。 最好的看看openCV。它们有大量与计算机视觉相关的功能和算法。根据图像中粒子的形状和结构,SimpleBlobDetector()可能有用,也可能无用。这里有一个很好的教程: 或者你可以尝试实现你自己的算法?搜索高斯核的拉普拉斯函数。如果您的粒子形状不规则,则可能会变

我想计算图像中粒子的数量。 我发现Image J确实需要我做的事情,但它是java,它只是我需要集成的特性之一,使得从C++应用程序调用java程序是没有价值的。 我正在寻找一个C++库来实现这个,任何综合的算法都是不受欢迎的。 最好的

看看openCV。它们有大量与计算机视觉相关的功能和算法。根据图像中粒子的形状和结构,SimpleBlobDetector()可能有用,也可能无用。这里有一个很好的教程:

或者你可以尝试实现你自己的算法?搜索高斯核的拉普拉斯函数。如果您的粒子形状不规则,则可能会变得更加困难,需要设置阈值并进行连续处理。

请查看openCV。它们有大量与计算机视觉相关的功能和算法。根据图像中粒子的形状和结构,SimpleBlobDetector()可能有用,也可能无用。这里有一个很好的教程:


或者你可以尝试实现你自己的算法?搜索高斯核的拉普拉斯函数。如果你的粒子是不规则的形状,它可能会变得更加困难,需要阈值和控制。

我认为CImg对你来说是一个很好的解决方案-确实如此。它是单个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");
}
看起来是这样的:

然后,当您运行该程序时,它会用递增的数字标记每个blob(即矩形),即每个blob都比最后一个稍亮


我认为CImg对您来说将是一个很好的解决方案-的确如此。它是单个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");
}
看起来是这样的:

然后,当您运行该程序时,它会用递增的数字标记每个blob(即矩形),即每个blob都比最后一个稍亮


感谢您的反馈,是的,图像来自空间图像。每次我想到OpenCV,我都会想到它的大小,随着时间的推移,它变得越来越大。SimpleBlobDetector看起来就是我要找的,非常感谢。当然,原始图像需要一些清理(去除不规则的背景,增加对比度等)。谢谢你的反馈,是的,图像来自太空图像。每次我想到OpenCV,我都会想到它的大小,随着时间的推移,它变得越来越大。SimpleBlobDetector看起来就是我要找的,非常感谢。当然,原始图像需要一些清理(去除不规则的背景,增加对比度等)。