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

时间:2015-09-12 12:52:37

标签: java opencv

我试图从拥有一枚硬币或一张钞票的图像中删除背景。

我试试这段代码:

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

结果是黑色图像。

我怎样才能在使用opencv的java中做到这一点?

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

enter image description here

1 个答案:

答案 0 :(得分: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