6

I have this mask :

mask

Let's say I would like to make a bitwise_and with another image to fill in the white this works:

cv::bitwise_and(srcImage, mask, dstImage, [mask???]);

Now, the resulting image gives something like this :

Image + Mask

This is fine and dandy, but I'd like to subtract the black from the result. I've seen that bitwise_and also accepts an 8-bit single channel image, I'm not exactly sure what it does. I suppose if it's 0 then it let's it pass otherwise it ignores it.

So how would I use the same mask to convert it as an 8-bit image and use it to remove the black of the result? I'd like the same image, but without the black border essentially.

Patrick.SE
  • 4,444
  • 5
  • 34
  • 44

2 Answers2

8

The solution is pretty simple. Since I didn't know much about the openCV library I wasn't using the right function for the task. I'm still not certain for sure why the application crashed when passing a mask to the bitwise_and method though.

Essentially all you have to do is the following :

image.copyTo(dst, mask);

This will copy the image to dst and even handle the details of the mat to give it the same properties as 'image'. Just have to make sure to have mask be an 8-bit single channel image. This way when you call the method only the pixels that pass the mask will be copied to dst.

Here's the doc link for more information:copyTo

Patrick.SE
  • 4,444
  • 5
  • 34
  • 44
0

just create a new canvas larger than the fox_image

then use the “AND” method

or, you can translate the black part of the first image into white: 0 ---255

then, the problem would be solved.