I am using Python and Opencv. I am now doing a license-plate recognition project. I can now recognize the plate like this:
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.
解决方案
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