Chief Delphi

Chief Delphi (http://www.chiefdelphi.com/forums/index.php)
-   Java (http://www.chiefdelphi.com/forums/forumdisplay.php?f=184)
-   -   GRIP and Java Code Not Agreeing (http://www.chiefdelphi.com/forums/showthread.php?t=154226)

GRSICP 25-01-2017 10:43

GRIP and Java Code Not Agreeing
 
I'm new to vision processing and I've run into a problem. I currently have my Java code set up to process the reflective tape from the gear pegs using OpenCV. When I run this code, often only one of the two vision targets is identified. I saved the images that were failing and then fed them through GRIP. GRIP consistently finds both targets.

Here is a picture of my GRIP program with one of the failed images: http://imgur.com/iGsEQeK

Here is the processing part of the code I am running in Java:
Code:

Imgproc.cvtColor(bgr, hsvConvert, Imgproc.COLOR_BGR2HSV);
                        Core.inRange(hsvConvert, new Scalar (0, 0, 0), new Scalar (180, 255, 64), hsv); //those two Scalar values are the the max and min HSV values respectively. Those were determined in GRIP.
                        Imgproc.findContours(hsv, contours, mhierarchy, Imgproc.RETR_LIST, Imgproc.CHAIN_APPROX_SIMPLE); //first enum lets you control things about hierarchy, I chose option with no hierarchy
                        Imgproc.drawContours(bgr, contours,0,new Scalar (0,255,0),1);
                        int idex=0;
                        int size = contours.size();
                       
                        for (idex=0; idex < contours.size(); idex++)
                        {
                                test = contours.get(idex);
                                nums = findCenterXYDistance(test.toList());
                                System.out.println("MaxX: " +nums[0]+ "; Width: " + nums[1] + "; MaxY: " + nums[2] + "; Height: " + nums[3]);
                                targetRatio = nums[3]/nums[1];
                                System.out.println("Ratio: " + targetRatio + "; Area: " + Imgproc.contourArea(test));
                               
                                if (Imgproc.contourArea(test)>100)
                                {
                                        finalContours.add(test);
                                }
                                idex++;
                        }

As far as I can tell, GRIP and my code should produce the same results. Any ideas on why my output would be different?

SamCarlberg 25-01-2017 10:50

Re: GRIP and Java Code Not Agreeing
 
You're doing idex++ twice.

And why are you copying the GRIP pipeline by hand? GRIP can generate code right into your program so you don't have to.

Generating code
Using it in a robot program

GRSICP 25-01-2017 11:01

Re: GRIP and Java Code Not Agreeing
 
Good catch! Hopefully that's the problem, I'll retest the code this afternoon.

I should have explained more completely, I am running this code on a raspberry pi so I didn't want to use GRIP.

SamCarlberg 25-01-2017 11:13

Re: GRIP and Java Code Not Agreeing
 
You can still use GRIP to generate code to use in a raspberry pi program.

GRSICP 25-01-2017 12:48

Re: GRIP and Java Code Not Agreeing
 
When I first looked into vision processing over Christmas break, I was originally hoping to use GRIP. However, when I looked at the then-current version of GRIP's instructions for install, it did not seem to be supported for the Raspberry pi. Therefore, I went ahead and learned to use OpenCV. I have not looked at more recent versions of GRIP, so this might have changed. Or I may have misunderstood originally.

SamCarlberg 25-01-2017 13:34

Re: GRIP and Java Code Not Agreeing
 
GRIP doesn't officially support the pi. Java doesn't have the UI libraries for the pi, but there was a community effort to get it running in headless mode with the deploy functionality. But we've added code generation since then to replace it.


All times are GMT -5. The time now is 21:49.

Powered by vBulletin® Version 3.6.4
Copyright ©2000 - 2017, Jelsoft Enterprises Ltd.
Copyright © Chief Delphi