0

I am using Python and Opencv. I am now doing a license-plate recognition project. I can now recognize the plate like this:

enter image description here

And I got an "array" like this :

[[[542 796]]

 [[965 883]]

 [[547 884]]
   
 [[966 795]]]

The problem is: How can I crop out the bound region with these coordinates?

As the four corrdinates are permuted and it is not a rectangle, so I dont know how I can crop this out.

Community
  • 1
  • 1
VICTOR
  • 1,724
  • 5
  • 19
  • 51
  • Is there any fast way to find the upper-left point coordinates? – VICTOR Jun 20 '16 at 03:27
  • If your script always returns the array in the same way, then it is the fixed-index element of it. How are your axes defined? If x = 0 and y = 0 is the top-left corner of an image, then the point you are looking for is the first one in the array. – Jezor Jun 20 '16 at 03:34
  • do you want to warp the parallelogram to get a rectangle (wich might distort the interior of the parallelogram), or do you want to crop a rectangle around the parallelogram (and so get some background in your cropped image)? The latter is easily achieved by cv::boundingBox function. – Micka Jun 20 '16 at 08:24

1 Answers1

0

You can crop the inner rectangle or outer bounding rectangle. Let the four co-ordinates be:-

(x1,y1), (x2,y2)

(x3,y3), (x4,y4)

Assuming, you are interested in outer bounding rectangle, so that no letter is segmented, you can do simple cropping using below ROI.

int topLeftX = min(x1,x3);
int topLeftY = min(y1, y2);
int width = max(x2, x4) - topLeftX;
int height = max(y3, y4) - topLeftY;
cv::Rect outerRoi(topLeftX, topLeftY, width, height);
cv::Mat roiImage = image(outerRoi); //Note that this will not create a deep copy

If interested in largest rectangle which fits the trapezium from inside, you should swap min with max and vice-versa.

If you want a trapezium like roi, you should create a mask image. For further directions,, see copying non-rectangular roi opencv

Community
  • 1
  • 1
saurabheights
  • 3,152
  • 1
  • 26
  • 39