我试图从拥有一枚硬币或一张钞票的图像中删除背景。
我试试这段代码:
BackgroundSubtractorMOG BGS = new BackgroundSubtractorMOG();
BGS.apply(src, dest,0.1);
结果是黑色图像。
我怎样才能在使用opencv的java中做到这一点?
图像将从相机捕获,因此它可能有背景,我想删除背景,图像可能是这样的:
答案 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
图片: