【发布时间】:2016-01-13 16:26:53
【问题描述】:
我从以下图片开始,命名为rgbaMat4Mask.bmp:
然后我把它转成HSV,然后用inRange()找轮廓,得到下面的Mat命名为maskedMat:
然后我继续在一个名为newMatWithMask 的新创建的空Mat 上绘制第一个轮廓(较大的轮廓),它的大小与第一张图像的大小相同 我从开始:
到目前为止一切顺利,但问题现在开始了。我创建了一个新的Mat 并赋予它与第一个轮廓(较大的轮廓)相同的大小 strong>,然后将其背景颜色设置为new Scalar(120, 255, 255)。然后我使用copyTo 函数将newMat4MaskFinished 复制到其中。 但生成的Mat 的大小与轮廓的大小不一样,其背景颜色也不设置为蓝色的new Scalar(120, 255, 255)。
它是一个与整个蒙版大小相同的图像,并且具有黑色背景。为什么? 我做错了什么?
public void doProcessing(View view) {
// READING THE RGBA MAT
Mat rgbaMat4Mask = Highgui.imread("/mnt/sdcard/DCIM/rgbaMat4Mask.bmp");
// CONVERTING TO HSV
Mat hsvMat4Mask = new Mat();
Imgproc.cvtColor(rgbaMat4Mask, hsvMat4Mask, Imgproc.COLOR_BGR2HSV);
Highgui.imwrite("/mnt/sdcard/DCIM/hsvMat4Mask.bmp", hsvMat4Mask);//check
// CREATING A FILTER/MASK FOR RED COLORED BLOB
Mat maskedMat = new Mat();
Core.inRange(hsvMat4Mask, new Scalar(0, 100, 100), new Scalar(10, 255, 255), maskedMat);
Highgui.imwrite("/mnt/sdcard/DCIM/maskedMat.bmp", maskedMat);// check
// COPYING THE MASK TO AN EMPTY MAT
// STEP 1:
List<MatOfPoint> contours = new ArrayList<MatOfPoint>();
Imgproc.findContours(maskedMat, contours, new Mat(), Imgproc.RETR_EXTERNAL, Imgproc.CHAIN_APPROX_NONE);
//STEP 2:
Mat newMat4Mask = new Mat(rgbaMat4Mask.rows(), rgbaMat4Mask.cols(), CvType.CV_8UC1);
newMat4Mask.setTo(new Scalar(0));
Imgproc.drawContours(newMat4Mask, contours, 0, new Scalar(255), -1);//TODO Using -1 instead of CV_FILLED.
Highgui.imwrite("/mnt/sdcard/DCIM/newMatWithMask.bmp", newMat4Mask);// check
//STEP 3
Log.i(TAG, "HAPPY rows:"+contours.get(0).rows()+" columns:"+contours.get(0).cols());
Mat newMatwithMaskFinished = new Mat(contours.get(0).rows(), contours.get(0).cols(), CvType.CV_8UC3);
newMatwithMaskFinished.setTo(new Scalar(120, 255, 255));
rgbaMat4Mask.copyTo(newMatwithMaskFinished, newMat4Mask);
Highgui.imwrite("/mnt/sdcard/DCIM/newMatwithMaskFinished.bmp", newMatwithMaskFinished);//check*/
}
【问题讨论】:
标签: android opencv image-processing opencv3.0 opencv4android