Imgproc.getRectSubPix not working/giving errors [closed]
PS:Sorry for reposting, but i get internal server error when i try to see my last post.
I work on a thesis and for 3 days consecutive i'm held back by an error in my code that , for the love of god, can't seem to fix it.
The ideea is simple, i have a map with 3 black corners(exactly like the QR code). I get the 3 black corners center coordinates and the last point's coordinate(Point D) I want to exctract this area to a file in a way to have the map always pointed at an agnle of 0, 90, 180, 270,360 degrees. I've searched the internet and found a solution involving RotatedRectangle. Here's some code that works :
public static RotatedRect getRotatedRect(List<Point> orderedPointList, Point D){// here i have as parameters Points(in this order) Top Right and Bottom + the final calculated point(Point D);
if(orderedPointList==null)
return null;
RotatedRect rect = new RotatedRect();
Point Top = orderedPointList.get(0);
Point Right = orderedPointList.get(1);
Point Bottom = orderedPointList.get(2);
Point[] points= new Point[]{Top,Right,D,Bottom};
rect.points(points);
Point Center = new Point();
Center.x=(Bottom.x+Right.x)/2;
Center.y=(Bottom.y+Right.y)/2;
rect.center = Center;
double diference1=Top.x-Bottom.x;
double difference2=Top.y-Bottom.y;
double angle=Math.atan(diference1-difference2) * 180/Math.PI;// this formula is used to see how much the map is rotated untill now i haven't tested it for all degrees but as i see it returns -180 0 180.
rect.angle=angle;
double mapwidth=Math.sqrt((Right.x-Top.x)*(Right.x-Top.x)+(Right.y-Top.y)*(Right.y-Top.y));
double mapheight=Math.sqrt((Bottom.x-Top.x)*(Bottom.x-Top.x)+(Bottom.y-Top.y)*(Bottom.y-Top.y));
rect.size.width=mapwidth;
rect.size.height=mapheight; // here i set the RotatedRectangle width and height.
return rect;
}
The following code, however doesn't work no matter what i do:
public static Mat getRotatedRectMat(Mat mImage,RotatedRect rect){
if(rect==null)
return null;
Mat M = new Mat();
Mat rotated = new Mat();
Mat clone=mImage.clone();
//clone.convertTo(clone, CvType.CV_32F);
//rotated.convertTo(rotated, CvType.CV_32F);
// perform the affine transformation
Rect boundingRect = rect.boundingRect();
if(boundingRect.x >= 0 && boundingRect.y >=0
&& (boundingRect.x+boundingRect.width) < clone.cols() &&
(boundingRect.y+boundingRect.height) < clone.rows() ){
Mat cropped=new Mat();
M = Imgproc.getRotationMatrix2D(rect.center, rect.angle, 0.5);
Imgproc.warpAffine(clone, rotated, M, clone.size(), Imgproc.INTER_AREA);
Imgproc.getRectSubPix(rotated, rect.size, rect.center, cropped);//CRASHES exactly right here
reason:Noone knows
return cropped;
}
Some thing's i've tried from stackoverflow& other sites: http://stackoverflow.com/questions/28... How do I calculate relative time?... - this is the closest result i'd want to get but i have no ideea how to do it in OpenCV4Android
Edit: Did a trycatch on the error, here's the error message cv::Exception: /home/reports/ci/slave_desktop/50-SDK/opencv/modules/imgproc/src/samplers.cpp:556: error: (-210) in function void ...
if you only can say: "doesn't work" - that's very poor.
Added a link to stackoverflow with a similar thing and ther you have the logs. http://stackoverflow.com/questions/28...
^^ not valid idea here. your so questions does not interest anyone here.
Aham, this is your ideea of a constructive "comment" ? Can you help me or you just came here hoping u get free coment points?
you don't get any points for comments here, and all i'm trying is to get you to improve your question.
again, it does not help, if you're explaining parts of your question here on SO.
as long as you can't clearly specify, what's wrong with the code in question, - noone can help.
again, if there were errors, - what exactly ? if the result wasn't what you expected, - how so ? you need to explain.
Well, posted the message i got, should i print the stacktrace too? Also sorry for jumping on ya, first time i request help online, and i'm used with trolls from gaming :D
Found the answer, will post it tomorrow(can't post it now)