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?