ठीक तो मैं एक नौसिखिया OpenCV के लिए कर रहा हूँ, मैं एक grabcut जो मेरे लिए "ठीक है" लगता है, सिवाय इसके किनारों सुंदर आकार से बाहर हैं, मैं यथार्थवादी किनारों पाने के लिए, हो सकता है किनारों को धुंधला चाहते प्रदर्शन करने के लिए प्रबंधन है बाहर एक पूरी तरह से किया छवि प्राप्त करने, एक और बात मैंने देखा है रंग बहुत उज्ज्वल पूरी प्रक्रिया के बाद मैं जीवंतता कुछ हद तक नीचे स्वीकार्य को कम करने के लिए करना चाहता था हो जाते हैं मेरे कोड हैएज शोधन 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 border2 = border + border;
Rect rect2 = new Rect(border, border, img.cols() - border2, img.rows()-border2);
Mat mask = new Mat();
debugger(""+mask.type());
mask.setTo(new Scalar(125));
Mat fgdModel = new Mat();
fgdModel.setTo(new Scalar(255, 255, 255));
Mat bgdModel = new Mat();
bgdModel.setTo(new Scalar(255, 255, 255));
Mat imgC3 = new Mat();
Imgproc.cvtColor(img, imgC3, Imgproc.COLOR_RGBA2RGB);
Log.d(TAG, "imgC3: " + imgC3);
Log.d(TAG, "Grabcut begins");
Imgproc.grabCut(imgC3, mask, rect2, bgdModel, fgdModel, 2, Imgproc.GC_INIT_WITH_RECT);
Mat source = new Mat(1, 1, CvType.CV_8U, new Scalar(3.0));
//Do Sth
Core.compare(mask, source, mask, Core.CMP_EQ);
//Do Sth
Mat foreground = new Mat(img.size(), CvType.CV_8UC3, new Scalar(255, 255, 255));
img.copyTo(foreground, mask);
Imgproc.rectangle(img, p1, p2, color);
Mat background = new Mat();
try {
background = Utils.loadResource(getApplicationContext(),
R.drawable.blackcolor);
} catch (IOException e) {
e.printStackTrace();
}
Mat tmp = new Mat();
Imgproc.resize(background, tmp, img.size());
background = tmp;
Mat tempMask = new Mat(foreground.size(), CvType.CV_8UC1, new Scalar(255, 255, 255));
Imgproc.cvtColor(foreground, tempMask, 6/* COLOR_BGR2GRAY */);
Mat vals = new Mat(1, 1, CvType.CV_8UC3, new Scalar(0.0));
dst = new Mat();
background.setTo(vals, tempMask);
Imgproc.resize(foreground, tmp, mask.size());
foreground = tmp;
Core.add(background, foreground, dst, tempMask);
Log.d(TAG, "Convert to Bitmap");
//removing blackbaground started
Mat tmp2 = new Mat();
Mat alpha = new Mat();
Imgproc.cvtColor(dst, tmp2, Imgproc.COLOR_BGR2GRAY);
Imgproc.threshold(tmp2, alpha, 100, 255, Imgproc.THRESH_BINARY);
List<Mat> rgb = new ArrayList<Mat>(3);
Core.split(dst, rgb);
List<Mat> rgba = new ArrayList<Mat>(4);
rgba.add(rgb.get(0));
rgba.add(rgb.get(1));
rgba.add(rgb.get(2));
rgba.add(alpha);
Core.merge(rgba, dst);
Bitmap output = Bitmap.createBitmap(dst.width(), dst.height(), Bitmap.Config.ARGB_8888);
Utils.matToBitmap(dst, output);
//removing back ended
Utils.matToBitmap(dst, bitmap);
//release MAT part
img.release();
imgC3.release();
mask.release();
fgdModel.release();
bgdModel.release();
alreadyRun = true;
return bitmap;
}
मैं एक ही पोस्ट किया है ओपनसीवी साइट पर सवाल है, लेकिन यहां तुलना में कम दर्शक दिखते हैं, छवियां
यह बहुत अच्छा है, लेकिन मैं कैसे मूल रंग बनाए रख सकते हैं और क्या पृष्ठभूमि है सफेद नहीं है, क्या उपायों मैं रख सकते हैं यह pic की कोशिश करता है सुनिश्चित करने के लिए मेरे आयत से सटीक रूप से अधिकांश रंग? और आखिरकार आप किस पुस्तक का उपयोग करते हैं, मैंने कभी भी यह अच्छा नहीं होने के लिए ओपनसीवी की कल्पना की। –
संभावनाएं मेरी सभी छवियों के लिए हैं पृष्ठभूमि हमेशा एक रंग होगी, लेकिन शायद यह लाल और गहरा लाल –
अपडेट कोड का प्रयास करेगा। मुझे अन्य बीजी रंगों के बारे में सोचने दो। – sturkmen