我正在开发一个应用程序,预计将使用opencv删除图像背景,起初我尝试使用抓取,但它太慢,结果并不总是准确,然后我尝试使用阈值,虽然结果还没有关闭th grabcut ,它的速度非常快,看起来更好,所以我的代码首先查看图像色调并分析它的哪一部分显得更多,该部分被视为背景,问题有时会得到前景作为背景如下是我的代码:
private Bitmap backGrndErase()
{
Bitmap bitmap = BitmapFactory.decodeResource(getResources(), R.drawable.skirt);
Log.d(TAG, "bitmap: " + bitmap.getWidth() + "x" + bitmap.getHeight());
bitmap = ResizeImage.getResizedBitmap(bitmap, calculatePercentage(40, bitmap.getWidth()), calculatePercentage(40, bitmap.getHeight()));
Mat frame = new Mat();
Utils.bitmapToMat(bitmap, frame);
Mat hsvImg = new Mat();
List<Mat> hsvPlanes = new ArrayList<>();
Mat thresholdImg = new Mat();
// int thresh_type = Imgproc.THRESH_BINARY_INV;
//if (this.inverse.isSelected())
int thresh_type = Imgproc.THRESH_BINARY;
// threshold the image with the average hue value
hsvImg.create(frame.size(), CvType.CV_8U);
Imgproc.cvtColor(frame, hsvImg, Imgproc.COLOR_BGR2HSV);
Core.split(hsvImg, hsvPlanes);
// get the …Run Code Online (Sandbox Code Playgroud) 好吧所以我是opencv的新手,我已经设法执行一个对我来说似乎"好"的抓取,除了边缘非常变形,我想要获得逼真的边缘,可能会模糊边缘以获得完美的图像,我注意到的另一件事是整个过程后颜色往往太亮了我想减少活力到下面可以接受的是我的代码
private Bitmap backGrndErase()
{
color = new Scalar(255, 0, 0, 255);
dst = new Mat();
Bitmap bitmap = BitmapFactory.decodeResource(getResources(), R.drawable.myshirt);
Log.d(TAG, "bitmap: " + bitmap.getWidth() + "x" + bitmap.getHeight());
bitmap = ResizeImage.getResizedBitmap(bitmap, calculatePercentage(40, bitmap.getWidth()), calculatePercentage(40, bitmap.getHeight()));
bitmap = bitmap.copy(Bitmap.Config.ARGB_8888, true);
Log.d(TAG, "bitmap 8888: " + bitmap.getWidth() + "x" + bitmap.getHeight());
Mat img = new Mat();
Utils.bitmapToMat(bitmap, img);
Point p1 = new Point((img.cols()/10), (img.rows()/10));
Point p2 = new Point((img.cols()-img.cols()/10), (img.rows()-img.rows()/10));
Rect rect = new Rect(p1,p2);
int border = 20;
int …Run Code Online (Sandbox Code Playgroud)