Java OpenCV:检测彩色斑点

Java OpenCV:检测彩色斑点,java,android,algorithm,opencv,Java,Android,Algorithm,Opencv,我想寻求有关库OpenCV的帮助。我想问你们是否知道如何从图片中检测色斑的最佳方法。例如,我需要创建一个应用程序,它可以计算T恤上“脏点”的大小。假设有一件棕色T恤,还有一个由katchup或其他东西制作的污点 你能给我推荐算法或工艺吗?如何计算?还是一些教程 我不会请求你的帮助,但我的时间不多了,也许你以前遇到过这个问题 多谢各位 在openCV示例代码中(在“cpp示例”部分下),您可以找到一个名为“bgfg_segm.cpp”的.cpp文件。虽然那个代码是用于运动跟踪的,但我认为你也可以用

我想寻求有关库OpenCV的帮助。我想问你们是否知道如何从图片中检测色斑的最佳方法。例如,我需要创建一个应用程序,它可以计算T恤上“脏点”的大小。假设有一件棕色T恤,还有一个由katchup或其他东西制作的污点

你能给我推荐算法或工艺吗?如何计算?还是一些教程

我不会请求你的帮助,但我的时间不多了,也许你以前遇到过这个问题

多谢各位

在openCV示例代码中(在“cpp示例”部分下),您可以找到一个名为“bgfg_segm.cpp”的.cpp文件。虽然那个代码是用于运动跟踪的,但我认为你也可以用它来检测斑点

按“空格键”,可以开始/停止背景更新。一旦你确定了你的背景,那么任何额外的东西都会被检测到

策略:将布料放在网络摄像头前面,一旦它被选为背景,然后按“空格键”停止背景中的进一步更改。然后,您的程序应该能够跟踪布料颜色的任何变化

代码如下:

#include "opencv2/core/core.hpp"
#include "opencv2/imgproc/imgproc.hpp"
#include "opencv2/video/background_segm.hpp"
#include "opencv2/highgui/highgui.hpp"
#include <stdio.h>

using namespace std;
using namespace cv;

int main()
{

    VideoCapture cap;
    bool update_bg_model = true;

    cap.open(0);

    namedWindow("image", CV_WINDOW_NORMAL);
    namedWindow("foreground mask", CV_WINDOW_NORMAL);
    namedWindow("foreground image", CV_WINDOW_NORMAL);
    namedWindow("mean background image", CV_WINDOW_NORMAL);

    // Declare "object " of class "BackgroundSubtractorMOG2"
    BackgroundSubtractorMOG2 bg_model;//(100, 3, 0.3, 5);

    Mat img, fgmask, fgimg;

    for(;;)
    {
        cap >> img;

        if( fgimg.empty() )
          fgimg.create(img.size(), img.type());

        //update the model
        bg_model(img, fgmask, update_bg_model ? -1 : 0); // "bg_model" is object of class "BackgroundSubtractorMOG2" as declared above.

        fgimg = Scalar::all(0);
        img.copyTo(fgimg, fgmask);

        Mat bgimg;
        bg_model.getBackgroundImage(bgimg);

        imshow("image", img);
        imshow("foreground mask", fgmask);
        imshow("foreground image", fgimg);
        if(!bgimg.empty())
          imshow("mean background image", bgimg );

        char k = (char)waitKey(30);
        if( k == 27 ) break;
        if( k == ' ' ) // Change the Background updation status by Spacebar key
        {
            update_bg_model = !update_bg_model; // initially "bool update_bg_model = true"
            if(update_bg_model)
                printf("Background update is on\n");
            else
                printf("Background update is off\n");
        }
    }

    return 0;
}
#包括“opencv2/core/core.hpp”
#包括“opencv2/imgproc/imgproc.hpp”
#包括“opencv2/video/background_segm.hpp”
#包括“opencv2/highgui/highgui.hpp”
#包括
使用名称空间std;
使用名称空间cv;
int main()
{
视频捕捉帽;
bool update_bg_model=true;
上限开放(0);
namedWindow(“图像”,CV\u窗口\u正常);
namedWindow(“前景遮罩”,CV\u窗口\u正常);
namedWindow(“前景图像”,CV\u窗口\u正常);
namedWindow(“平均背景图像”,CV\u窗口\u正常);
//声明类“BackgroundSubtractorMOG2”的“对象”
背景MOG2 bg_模型;//(100,3,0.3,5);
Mat img、fgmask、fgimg;
对于(;;)
{
cap>>img;
if(fgimg.empty())
create(img.size(),img.type());
//更新模型
bg_模型(img、fgmask、update_bg_模型?-1:0);/“bg_模型”是上述“BackgroundSubtractorMOG2”类的对象。
fgimg=标量::全部(0);
img.copyTo(fgimg,fgmask);
Mat-bgimg;
bg_model.getBackgroundImage(bgimg);
imshow(“图像”,img);
imshow(“前景遮罩”,fgmask);
imshow(“前景图像”,fgimg);
如果(!bgimg.empty())
imshow(“平均背景图像”,bgimg);
字符k=(字符)等待键(30);
如果(k==27)中断;
if(k='')//通过空格键更改后台更新状态
{
update_bg_model=!update_bg_model;//最初为“bool update_bg_model=true”
如果(更新\u bg\u模型)
printf(“后台更新已打开\n”);
其他的
printf(“后台更新关闭\n”);
}
}
返回0;
}