duy_sau_rom
duy_sau_rom

Reputation: 55

Detecting a partially obscured rectangle in image with openCV

I am working on a project and I ran into a situation. I want to detect a rectangle object (a black keyboard) in an IR image. The background is pretty clean so it's not really a hard problem, I used simple threshold and minAreaRect in OpenCV to solve it. Easy case of the problem

But I also want the program to track this object when I use my hand to move it (yes, in real time). And my hand will cover a small part of the object like this case. Tricky case of the problem

My initial thought is to learn the object size in the easy case, and for the hard case, try to match my "learned rectangle" to cover as many white pixels as possible.

Anyone has a better solution, maybe a feature-based approach? I don't know if using features can improve the situation because object is mostly black in these IR images.

Thank you in advance.

Upvotes: 1

Views: 1548

Answers (2)

Headcrab
Headcrab

Reputation: 7103

Your "tricky" case is still fairly simple, can be solved with dilate/erode (as mentioned by Shawn Mathew) and then the same minAreaRect. Here, on the right is your thresholded image after erosion and dilation with a 5x5 kernel, minAreaRect finds a rotated rectangle for it, drawn over the original thresholded image on the left:

enter image description here

Are you interested in more complicated cases, for example, where you hand covers one of the short edges of the keyboard entirely?

Upvotes: 1

Shawn Mathew
Shawn Mathew

Reputation: 2337

How about using morphological operations like dilation and erosion (Opencv has implementations for these) on the thresholded image. Once you get that, you could try some corner detection/contour detection or line detectors(in opencv contrib module) to understand the shape of the object.

Upvotes: 2

Related Questions