Quantcast
Channel: OpenCV Q&A Forum - RSS feed
Viewing all articles
Browse latest Browse all 41027

Why is my copyTo function Not copying the mask to the correct Mat?

$
0
0
I started with the following image, named `rgbaMat4Mask.bmp`: [![enter image description here][1]][1] Then I converted it to HSV, and then did `inRange()` to find contours, and got the following `Mat` named `maskedMat`: [![enter image description here][2]][2] Then I went on to draw the first contour (the bigger one), on a newly created empty `Mat` named `newMatWithMask`, which has been given *the **same size as that of the first image** I started with*: [![enter image description here][3]][3] **So far so good, but the problem starts now.** I created a new `Mat` and gave it the **same size as that of the first contour (the bigger one)**, and then set its background color to `new Scalar(120, 255, 255)`. Then I copied the `newMat4MaskFinished` to it using `copyTo` function. **But neither is the size of the resulting `Mat` same as that of the contour, nor is its background color set to `new Scalar(120, 255, 255)` which is blue.** [![enter image description here][4]][4] It is rather an image with size same as that of the entire mask, and has a black background. why? **What am I doing wrong?** 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 contours = new ArrayList(); 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*/ } [1]: http://i.stack.imgur.com/4aFM4.png [2]: http://i.stack.imgur.com/Zq6eN.png [3]: http://i.stack.imgur.com/ZOeY8.png [4]: http://i.stack.imgur.com/BxlE9.png

Viewing all articles
Browse latest Browse all 41027

Trending Articles



<script src="https://jsc.adskeeper.com/r/s/rssing.com.1596347.js" async> </script>