首页 文章

如何使用OpenCV从Java中删除静态图像的背景?

提问于
浏览
2

我正在尝试从具有一个硬币或一个钞票的图像中删除背景 .

我试试这段代码:

BackgroundSubtractorMOG BGS = new BackgroundSubtractorMOG(); 
BGS.apply(src, dest,0.1);

结果是一个黑色的图像 .

我如何使用opencv在java中做到这一点?

图像将从相机捕获,因此它可能有背景,我想删除背景,图像可能是这样的:

enter image description here

1 回答

  • 3

    这是分割账单的简单程序 . 基本上,由于背景是均匀的,您只需计算边的边界框 .

    此代码在C中,但应该很容易移植到Java . 请注意,您的jpeg图像有许多压缩工件 . 如果你有一个非压缩图像(png),结果会更好 .

    #include <opencv2\opencv.hpp>
    using namespace cv;
    using namespace std;
    
    int main() 
    {
        Mat3b img = imread("path_to_image");
    
        Mat1b gray;
        cvtColor(img, gray, COLOR_BGR2GRAY);
    
        Mat1b edges;
        Canny(gray, edges, 400, 100);
    
        vector<Point> points;
        findNonZero(edges, points);
    
        Rect box = boundingRect(points);
    
        Mat3b bill(img(box));
    
        return 0;
    }
    

    bill 图片:

    enter image description here

相关问题