Hi,
Note: I’m a new user on the forum, so I’m limited to 1 image for now. I need a lot of images to explain my use case, could any of the admins be so kind to lift that restriction so I can add the images? Pretty please, the only other way is that I would document it in a readme (using the same markdown) in a github repo and link to it from here, but I think that is worse.
I’ve been breaking my head over this for hours, and I either don’t understand how the mask template works, or there is some kind of bug. I tried with the last 5 versions of OpenCV (4.9.0, 4.8.1, 4.7.0, 4.6.0) but they all have the same behaviour.
Let me first explain what I’m trying to do, which is pretty straightforward: I want to find a template using a mask, using TM_CCORR_NORMED (to get values between 0 and 1), which means that I want to ignore some parts of the template (the transparent pixels).
This is the 20x20 template (needle):
It looks like a window, it has a few white pixels (the borders), and a few transparent pixels.
Trying to find it in an image (haystack) and drawing a yellow border around it sometimes works fine.
4 examples that work fine:
todo: insert images, new user restrictions
However, it fails to find it on the red part:
todo: insert images, new user restrictions
I tried moving the red part to a different location, but it seems color-related rather than location-related, because this also fails to find it there:
todo: insert images, new user restrictions
I tried to investigate the results, and it looks like +Infinity and -Infinity (results of dividing by 0) and NaN (not sure why that occurs) are breaking the normalization.
Out of the 4 matches that seem to work fine, only 2 are “really” OK.
-
the one with the needle in the middle (over all the colors), where the best match is at the bottom left (note that the heatmap does not have the same size as the haystack, but haystack-needle, so in the haystack it’s more towards the top-left)
todo: insert images, new user restrictions -
the one on black, peak at bottom left:
todo: insert images, new user restrictions
These are where I draw the top-left corner of the yellow box (± 1 pixel).
However, the heatmaps for the other 2 matches are black. but the location of the best match is correct. The last 2 don’t find the correct location either.
I added a lot of logging to get an idea of what is happening, so let me walk you through this use case:
todo: insert images, new user restrictions
Here is some code and logs:
First, I read both needle and haystack as IMREAD_COLOR
, ignoring any alpha channel (transparency):
private static void writeImage(String prefix, String imageName, Mat img) {
String imageFilename = prefix + imageName + ".png";
Imgcodecs.imwrite(imageFilename, img);
l.info("Wrote image '{}'", imageFilename);
}
Log:
2024-08-06 23:24:43 INFO Read image 'needle_white' using codec 1, result Mat: Mat [ 20*20*CV_8UC3, isCont=true, isSubmat=false, nativeObj=0x222f65fcbc0, dataAddr=0x222f65abdc0 ]
2024-08-06 23:24:43 INFO Read image 'haystack_white_needle_on_red' using codec 1, result Mat: Mat [ 50*50*CV_8UC3, isCont=true, isSubmat=false, nativeObj=0x222f65fc220, dataAddr=0x222f5e2ab40 ]
I then re-read the needle INCLUDING the alpha channel, and create a mask out of it. Code:
public static Mat createMask(String imageName) {
Mat img = readImage(imageName, Imgcodecs.IMREAD_UNCHANGED);
Mat mask = new Mat(img.size(), CvType.CV_8UC1);
for (int y = 0; y < img.rows(); y++) {
for (int x = 0; x < img.cols(); x++) {
// OpenCV uses BGR order, so the alpha channel is the 4th channel
double alphaValue = img.get(y, x)[3];
if (alphaValue > 0) {
mask.put(y, x, 255); // Consider this pixel
} else {
mask.put(y, x, 0); // Ignore this pixel
}
}
}
return mask;
}
Docs say that any non-0 value is not ignored, I used 0 and 255 but tried 0 and 1 too.
Logs:
2024-08-06 23:24:43 INFO Read image 'needle_white' using codec -1, result Mat: Mat [ 20*20*CV_8UC4, isCont=true, isSubmat=false, nativeObj=0x222f65fc300, dataAddr=0x222f6a810c0 ]
Note that 8UC4
(4th channel is alpha).
I then use matchTemplate
, and also try normalizing it (0-100) to understand what happens.
Code:
Mat matchResult = new Mat();
Imgproc.matchTemplate(haystackImg, needleImg, matchResult, matchMethod, mask);
l.info("matchResult: {}", matchResult);
Mat normalizedMatchResult = new Mat();
Core.normalize(matchResult, normalizedMatchResult, 0, 100, Core.NORM_MINMAX, CvType.CV_32F);
l.info("normalizedMatchResult: {}", matchResult);
Logs:
2024-08-06 23:24:43 INFO matchResult: Mat [ 31*31*CV_32FC1, isCont=true, isSubmat=false, nativeObj=0x222f65fd790, dataAddr=0x222f6c9cb00 ]
2024-08-06 23:24:43 INFO normalizedMatchResult: Mat [ 31*31*CV_32FC1, isCont=true, isSubmat=false, nativeObj=0x222f65fd790, dataAddr=0x222f6c9cb00 ]
Nothing special so far. The heatmap generation also happens here, the black heatmap suggests that we’re not staying withing the 0-255 boundaries, so the normalization fails. Code:
Mat heatmap = new Mat();
Core.normalize(matchResult, heatmap, 0, 255, Core.NORM_MINMAX, CvType.CV_8U);
writeImage(prefix, "04_heatmap", heatmap);
I then use minMaxLoc
as documented, and I tried both on the original matchResult
and my custom-normalized normalizedMatchResult
.
Code:
Core.MinMaxLocResult mmr = Core.minMaxLoc(matchResult);
l.info("minMaxLoc matchResult: maxVal {}, maxLoc {}, minVal {}, minLoc {}", mmr.maxVal, mmr.maxLoc, mmr.minVal, mmr.minLoc);
Core.MinMaxLocResult mmr2 = Core.minMaxLoc(normalizedMatchResult);
l.info("minMaxLoc normalizedMatchResult: maxVal {}, maxLoc {}, minVal {}, minLoc {}", mmr2.maxVal, mmr2.maxLoc, mmr2.minVal, mmr2.minLoc);
Logs:
2024-08-06 23:24:43 INFO minMaxLoc matchResult: maxVal Infinity, maxLoc {2.0, 27.0}, minVal -Infinity, minLoc {5.0, 30.0}
2024-08-06 23:24:43 INFO minMaxLoc normalizedMatchResult: maxVal -Infinity, maxLoc {0.0, 0.0}, minVal Infinity, minLoc {0.0, 0.0}
This isn’t right, maxVal
should be between 0.0 and 1.0 when using TM_CCORR_NORMED
, but it’s Infinity
.
Also, `` is not correct, it’s close: it should be (3,28) and not (2,27), but there is more.
I custom-printed the values in the result. I replace +Infinity and -Infinity with “+In” and “-In”, I printed NaN as “nan”, and I rounded the values I expect to be between 0 and 1.
This is the result:
2024-08-06 23:24:43 INFO y 0: 0,66 0,66 0,74 0,82 0,74 0,66 0,66 0,66 0,66 0,66 0,66 0,70 0,75 0,69 0,62 0,62 0,62 0,62 0,62 0,62 0,64 0,67 0,62 0,58 0,58 0,58 0,58 0,58 0,58 0,58 0,58
2024-08-06 23:24:43 INFO y 1: 0,66 0,66 0,75 0,83 0,75 0,66 0,66 0,66 0,66 0,66 0,66 0,71 0,75 0,69 0,62 0,62 0,62 0,62 0,62 0,62 0,65 0,67 0,63 0,58 0,58 0,58 0,58 0,58 0,58 0,58 0,58
2024-08-06 23:24:43 INFO y 2: 0,74 0,75 0,84 0,92 0,84 0,75 0,74 0,74 0,73 0,72 0,72 0,76 0,81 0,74 0,67 0,66 0,65 0,65 0,64 0,63 0,65 0,68 0,63 0,58 0,58 0,58 0,58 0,58 0,58 0,58 0,58
2024-08-06 23:24:43 INFO y 3: 0,82 0,83 0,92 1,00 0,92 0,83 0,82 0,80 0,79 0,78 0,77 0,81 0,86 0,79 0,71 0,70 0,69 0,67 0,66 0,64 0,66 0,68 0,63 0,58 0,58 0,58 0,58 0,58 0,58 0,58 0,58
2024-08-06 23:24:43 INFO y 4: 0,74 0,75 0,84 0,92 0,84 0,75 0,74 0,74 0,73 0,72 0,72 0,76 0,81 0,74 0,67 0,66 0,65 0,65 0,64 0,63 0,65 0,68 0,63 0,58 0,58 0,58 0,58 0,58 0,58 0,58 0,58
2024-08-06 23:24:43 INFO y 5: 0,66 0,66 0,75 0,83 0,75 0,66 0,66 0,66 0,66 0,66 0,66 0,71 0,75 0,69 0,62 0,62 0,62 0,62 0,62 0,62 0,65 0,67 0,63 0,58 0,58 0,58 0,58 0,58 0,58 0,58 0,58
2024-08-06 23:24:43 INFO y 6: 0,66 0,66 0,74 0,82 0,74 0,66 0,66 0,66 0,66 0,66 0,66 0,70 0,75 0,69 0,62 0,62 0,62 0,62 0,62 0,62 0,64 0,67 0,62 0,58 0,58 0,58 0,58 0,58 0,58 0,58 0,58
2024-08-06 23:24:43 INFO y 7: 0,64 0,64 0,71 0,78 0,71 0,64 0,64 0,64 0,64 0,65 0,65 0,69 0,73 0,68 0,62 0,63 0,63 0,63 0,64 0,64 0,66 0,69 0,65 0,61 0,62 0,62 0,62 0,62 0,62 0,62 0,62
2024-08-06 23:24:43 INFO y 8: 0,61 0,61 0,68 0,75 0,68 0,61 0,61 0,62 0,62 0,63 0,64 0,68 0,72 0,67 0,63 0,63 0,64 0,65 0,65 0,66 0,68 0,71 0,68 0,65 0,66 0,66 0,67 0,67 0,67 0,67 0,67
2024-08-06 23:24:43 INFO y 9: 0,60 0,60 0,67 0,73 0,67 0,60 0,60 0,61 0,62 0,63 0,64 0,67 0,71 0,67 0,63 0,63 0,64 0,65 0,66 0,67 0,69 0,71 0,68 0,65 0,66 0,67 0,68 0,68 0,68 0,68 0,68
2024-08-06 23:24:43 INFO y 10: 0,59 0,59 0,65 0,71 0,65 0,59 0,59 0,61 0,62 0,63 0,64 0,67 0,70 0,66 0,62 0,63 0,65 0,66 0,67 0,67 0,69 0,71 0,69 0,66 0,67 0,68 0,69 0,69 0,69 0,69 0,69
2024-08-06 23:24:43 INFO y 11: 0,63 0,64 0,70 0,75 0,70 0,64 0,63 0,65 0,66 0,66 0,66 0,69 0,72 0,69 0,65 0,65 0,66 0,68 0,68 0,68 0,70 0,71 0,69 0,67 0,67 0,69 0,71 0,71 0,71 0,71 0,71
2024-08-06 23:24:43 INFO y 12: 0,67 0,68 0,74 0,79 0,74 0,68 0,67 0,68 0,69 0,69 0,69 0,72 0,74 0,71 0,67 0,67 0,68 0,69 0,69 0,69 0,70 0,71 0,69 0,67 0,68 0,70 0,72 0,72 0,72 0,72 0,72
2024-08-06 23:24:43 INFO y 13: 0,60 0,60 0,66 0,71 0,66 0,60 0,60 0,62 0,64 0,64 0,64 0,67 0,70 0,67 0,64 0,64 0,66 0,68 0,68 0,68 0,70 0,71 0,70 0,68 0,69 0,71 0,73 0,73 0,73 0,73 0,73
2024-08-06 23:24:43 INFO y 14: 0,51 0,51 0,57 0,62 0,57 0,51 0,51 0,55 0,58 0,58 0,59 0,63 0,66 0,63 0,60 0,61 0,64 0,66 0,67 0,68 0,70 0,71 0,70 0,69 0,69 0,72 0,74 0,74 0,74 0,74 0,74
2024-08-06 23:24:43 INFO y 15: 0,50 0,50 0,55 0,60 0,55 0,50 0,50 0,54 0,58 0,58 0,59 0,62 0,65 0,62 0,60 0,61 0,64 0,67 0,68 0,68 0,70 0,72 0,70 0,69 0,70 0,73 0,75 0,75 0,75 0,75 0,75
2024-08-06 23:24:43 INFO y 16: 0,47 0,47 0,51 0,55 0,51 0,47 0,47 0,51 0,56 0,57 0,58 0,61 0,63 0,62 0,60 0,61 0,65 0,68 0,69 0,70 0,72 0,74 0,73 0,72 0,73 0,76 0,79 0,79 0,79 0,79 0,79
2024-08-06 23:24:43 INFO y 17: 0,43 0,43 0,47 0,50 0,47 0,43 0,43 0,49 0,53 0,55 0,57 0,59 0,62 0,61 0,61 0,62 0,66 0,70 0,71 0,72 0,74 0,76 0,76 0,75 0,77 0,80 0,83 0,83 0,83 0,83 0,83
2024-08-06 23:24:43 INFO y 18: 0,42 0,42 0,45 0,47 0,45 0,42 0,42 0,48 0,53 0,55 0,57 0,59 0,61 0,61 0,61 0,62 0,66 0,70 0,72 0,73 0,74 0,76 0,76 0,76 0,77 0,81 0,84 0,84 0,84 0,84 0,84
2024-08-06 23:24:43 INFO y 19: 0,41 0,41 0,42 0,44 0,42 0,41 0,41 0,47 0,53 0,55 0,57 0,58 0,60 0,60 0,61 0,62 0,67 0,71 0,72 0,73 0,75 0,76 0,76 0,77 0,78 0,81 0,85 0,85 0,85 0,85 0,85
2024-08-06 23:24:43 INFO y 20: 0,43 0,44 0,45 0,46 0,45 0,44 0,43 0,50 0,55 0,57 0,58 0,59 0,60 0,61 0,62 0,63 0,68 0,72 0,73 0,74 0,75 0,76 0,77 0,77 0,78 0,82 0,86 0,86 0,86 0,86 0,86
2024-08-06 23:24:43 INFO y 21: 0,45 0,46 0,47 0,47 0,47 0,46 0,45 0,52 0,57 0,58 0,59 0,60 0,61 0,62 0,63 0,64 0,69 0,73 0,74 0,75 0,75 0,76 0,77 0,78 0,79 0,83 0,87 0,87 0,87 0,87 0,87
2024-08-06 23:24:43 INFO y 22: 0,37 0,38 0,38 0,39 0,38 0,38 0,37 0,46 0,53 0,54 0,55 0,57 0,58 0,59 0,61 0,62 0,67 0,72 0,73 0,74 0,75 0,76 0,77 0,78 0,79 0,84 0,88 0,88 0,88 0,88 0,88
2024-08-06 23:24:43 INFO y 23: 0,27 0,27 0,27 0,27 0,27 0,27 0,27 0,39 0,48 0,50 0,52 0,53 0,55 0,57 0,58 0,60 0,66 0,72 0,73 0,74 0,75 0,76 0,78 0,79 0,80 0,85 0,89 0,89 0,89 0,89 0,89
2024-08-06 23:24:43 INFO y 24: 0,26 0,26 0,26 0,26 0,26 0,26 0,26 0,38 0,48 0,50 0,51 0,53 0,55 0,57 0,58 0,60 0,66 0,72 0,73 0,75 0,76 0,77 0,78 0,79 0,81 0,85 0,90 0,90 0,90 0,90 0,90
2024-08-06 23:24:43 INFO y 25: 0,18 0,18 0,18 0,18 0,18 0,18 0,18 0,34 0,45 0,48 0,50 0,52 0,54 0,57 0,59 0,60 0,67 0,73 0,75 0,76 0,78 0,79 0,81 0,82 0,84 0,89 0,93 0,93 0,93 0,93 0,93
2024-08-06 23:24:43 INFO y 26: -0,00 -0,00 -0,00 nan nan nan nan 0,30 0,43 0,46 0,49 0,51 0,54 0,57 0,59 0,61 0,68 0,75 0,76 0,78 0,80 0,82 0,83 0,85 0,87 0,92 0,97 0,97 0,97 0,97 0,97
2024-08-06 23:24:43 INFO y 27: nan nan +In nan nan nan nan 0,30 0,43 0,46 0,49 0,51 0,54 0,57 0,59 0,61 0,68 0,75 0,76 0,78 0,80 0,82 0,83 0,85 0,87 0,92 0,97 0,97 0,97 0,97 0,97
2024-08-06 23:24:43 INFO y 28: 0 0,00 0,00 nan 0,00 nan nan 0,30 0,43 0,46 0,49 0,51 0,54 0,57 0,59 0,61 0,68 0,75 0,76 0,78 0,80 0,82 0,83 0,85 0,87 0,92 0,97 0,97 0,97 0,97 0,97
2024-08-06 23:24:43 INFO y 29: nan nan nan nan nan nan nan 0,30 0,43 0,46 0,49 0,51 0,54 0,57 0,59 0,61 0,68 0,75 0,76 0,78 0,80 0,82 0,83 0,85 0,87 0,92 0,97 0,97 0,97 0,97 0,97
2024-08-06 23:24:43 INFO y 30: 0,00 0,00 0,00 -0,00 0 -In -In 0,30 0,43 0,46 0,49 0,51 0,54 0,57 0,59 0,61 0,68 0,75 0,76 0,78 0,80 0,82 0,83 0,85 0,87 0,92 0,97 0,97 0,97 0,97 0,97
As you can see, the bottom left is where a bunch of infinity/NaN/0 are occuring, which I think is throwing off the minMaxLoc
.
Since this example is still close, let’s look at the one where I moved the red part to the bottom right:
todo: insert images, new user restrictions
It has similar Infinity/NaN fields, but the best match location is even further off:
2024-08-06 23:24:43 INFO minMaxLoc matchResult: maxVal Infinity, maxLoc {1.0, 30.0}, minVal -Infinity, minLoc {6.0, 28.0}
2024-08-06 23:24:43 INFO minMaxLoc normalizedMatchResult: maxVal -Infinity, maxLoc {0.0, 0.0}, minVal Infinity, minLoc {0.0, 0.0}
In the bottom right, similar strange things are happening:
2024-08-06 23:24:43 INFO y 0: 0,97 0,97 0,97 0,97 0,97 0,97 0,97 0,93 0,90 0,89 0,88 0,87 0,86 0,85 0,84 0,83 0,79 0,75 0,74 0,73 0,72 0,71 0,69 0,68 0,67 0,62 0,58 0,58 0,58 0,58 0,58
2024-08-06 23:24:43 INFO y 1: 0,97 0,97 0,97 0,97 0,97 0,97 0,97 0,93 0,90 0,89 0,88 0,87 0,86 0,85 0,84 0,83 0,79 0,75 0,74 0,73 0,72 0,71 0,69 0,68 0,67 0,62 0,58 0,58 0,58 0,58 0,58
2024-08-06 23:24:43 INFO y 2: 0,97 0,97 0,97 0,97 0,97 0,97 0,97 0,93 0,90 0,89 0,88 0,87 0,86 0,85 0,84 0,83 0,79 0,75 0,74 0,73 0,72 0,71 0,69 0,68 0,67 0,62 0,58 0,58 0,58 0,58 0,58
2024-08-06 23:24:43 INFO y 3: 0,97 0,97 0,97 0,97 0,97 0,97 0,97 0,93 0,90 0,89 0,88 0,87 0,86 0,85 0,84 0,83 0,79 0,75 0,74 0,73 0,72 0,71 0,69 0,68 0,67 0,62 0,58 0,58 0,58 0,58 0,58
2024-08-06 23:24:43 INFO y 4: 0,97 0,97 0,97 0,97 0,97 0,97 0,97 0,93 0,90 0,89 0,88 0,87 0,86 0,85 0,84 0,83 0,79 0,75 0,74 0,73 0,72 0,71 0,69 0,68 0,67 0,62 0,58 0,58 0,58 0,58 0,58
2024-08-06 23:24:43 INFO y 5: 0,97 0,97 0,97 0,97 0,97 0,97 0,97 0,93 0,90 0,89 0,88 0,87 0,86 0,85 0,84 0,83 0,79 0,75 0,74 0,73 0,72 0,71 0,69 0,68 0,67 0,62 0,58 0,58 0,58 0,58 0,58
2024-08-06 23:24:43 INFO y 6: 0,97 0,97 0,97 0,97 0,97 0,97 0,97 0,93 0,90 0,89 0,88 0,87 0,86 0,85 0,84 0,83 0,79 0,75 0,74 0,73 0,72 0,71 0,69 0,68 0,67 0,62 0,58 0,58 0,58 0,58 0,58
2024-08-06 23:24:43 INFO y 7: 0,92 0,92 0,92 0,92 0,92 0,92 0,92 0,89 0,85 0,85 0,84 0,83 0,82 0,81 0,81 0,80 0,76 0,73 0,72 0,71 0,70 0,69 0,68 0,67 0,66 0,62 0,58 0,58 0,58 0,58 0,58
2024-08-06 23:24:43 INFO y 8: 0,87 0,87 0,87 0,87 0,87 0,87 0,87 0,84 0,81 0,80 0,79 0,79 0,78 0,78 0,77 0,77 0,73 0,70 0,69 0,69 0,68 0,67 0,67 0,66 0,66 0,62 0,58 0,58 0,58 0,58 0,58
2024-08-06 23:24:43 INFO y 9: 0,85 0,85 0,85 0,85 0,85 0,85 0,85 0,82 0,79 0,79 0,79 0,78 0,78 0,78 0,77 0,77 0,74 0,71 0,71 0,71 0,70 0,70 0,69 0,69 0,69 0,66 0,63 0,63 0,63 0,63 0,63
2024-08-06 23:24:43 INFO y 10: 0,83 0,83 0,83 0,83 0,83 0,83 0,83 0,81 0,78 0,78 0,78 0,78 0,78 0,77 0,77 0,77 0,75 0,73 0,73 0,72 0,72 0,72 0,72 0,72 0,72 0,70 0,67 0,68 0,68 0,68 0,67
2024-08-06 23:24:43 INFO y 11: 0,82 0,82 0,82 0,82 0,82 0,82 0,82 0,79 0,77 0,77 0,77 0,77 0,76 0,76 0,76 0,75 0,73 0,71 0,71 0,71 0,71 0,70 0,70 0,70 0,69 0,67 0,65 0,65 0,66 0,65 0,65
2024-08-06 23:24:43 INFO y 12: 0,80 0,80 0,80 0,80 0,80 0,80 0,80 0,78 0,76 0,76 0,76 0,76 0,75 0,75 0,74 0,74 0,71 0,69 0,69 0,70 0,69 0,69 0,68 0,67 0,67 0,64 0,62 0,63 0,64 0,63 0,62
2024-08-06 23:24:43 INFO y 13: 0,78 0,78 0,78 0,78 0,78 0,78 0,78 0,76 0,75 0,75 0,76 0,75 0,74 0,73 0,73 0,72 0,70 0,68 0,69 0,70 0,69 0,68 0,67 0,67 0,66 0,64 0,62 0,64 0,66 0,64 0,62
2024-08-06 23:24:43 INFO y 14: 0,76 0,76 0,76 0,76 0,76 0,76 0,76 0,75 0,73 0,74 0,75 0,74 0,73 0,72 0,72 0,71 0,69 0,68 0,69 0,70 0,69 0,67 0,67 0,66 0,65 0,64 0,62 0,65 0,67 0,65 0,62
2024-08-06 23:24:43 INFO y 15: 0,75 0,75 0,75 0,75 0,75 0,75 0,75 0,73 0,72 0,73 0,74 0,73 0,72 0,71 0,70 0,70 0,68 0,67 0,69 0,71 0,69 0,67 0,66 0,65 0,65 0,63 0,62 0,65 0,69 0,65 0,62
2024-08-06 23:24:43 INFO y 16: 0,68 0,68 0,68 0,68 0,68 0,68 0,68 0,67 0,66 0,68 0,69 0,68 0,67 0,67 0,66 0,66 0,65 0,64 0,67 0,69 0,67 0,65 0,65 0,64 0,64 0,63 0,62 0,66 0,70 0,66 0,62
2024-08-06 23:24:43 INFO y 17: 0,61 0,61 0,61 0,61 0,61 0,61 0,61 0,60 0,60 0,62 0,64 0,63 0,62 0,62 0,62 0,62 0,61 0,61 0,64 0,68 0,66 0,63 0,63 0,63 0,63 0,63 0,62 0,67 0,71 0,67 0,62
2024-08-06 23:24:43 INFO y 18: 0,59 0,59 0,59 0,59 0,59 0,59 0,59 0,59 0,58 0,61 0,63 0,63 0,62 0,62 0,63 0,63 0,63 0,64 0,68 0,72 0,69 0,67 0,67 0,68 0,69 0,69 0,69 0,74 0,79 0,74 0,69
2024-08-06 23:24:43 INFO y 19: 0,57 0,57 0,57 0,57 0,57 0,57 0,57 0,57 0,57 0,60 0,63 0,62 0,61 0,62 0,63 0,64 0,65 0,67 0,71 0,75 0,73 0,71 0,72 0,72 0,73 0,74 0,75 0,81 0,86 0,81 0,75
2024-08-06 23:24:43 INFO y 20: 0,54 0,54 0,54 0,54 0,54 0,54 0,54 0,54 0,55 0,58 0,62 0,61 0,60 0,60 0,61 0,61 0,62 0,63 0,68 0,72 0,70 0,68 0,68 0,69 0,69 0,70 0,71 0,76 0,81 0,76 0,71
2024-08-06 23:24:43 INFO y 21: 0,51 0,51 0,51 0,51 0,51 0,51 0,51 0,52 0,53 0,57 0,61 0,59 0,58 0,58 0,58 0,58 0,59 0,60 0,65 0,69 0,67 0,64 0,64 0,65 0,65 0,65 0,66 0,72 0,77 0,72 0,66
2024-08-06 23:24:43 INFO y 22: 0,49 0,49 0,49 0,49 0,49 0,49 0,49 0,50 0,51 0,56 0,60 0,58 0,56 0,57 0,57 0,57 0,58 0,59 0,65 0,69 0,67 0,64 0,64 0,64 0,64 0,65 0,66 0,72 0,78 0,72 0,66
2024-08-06 23:24:43 INFO y 23: 0,46 0,46 0,46 0,46 0,46 0,46 0,46 0,48 0,50 0,54 0,59 0,57 0,55 0,55 0,55 0,55 0,57 0,58 0,64 0,70 0,66 0,63 0,63 0,63 0,63 0,65 0,66 0,73 0,79 0,73 0,66
2024-08-06 23:24:43 INFO y 24: 0,43 0,43 0,43 0,43 0,43 0,43 0,43 0,45 0,48 0,53 0,58 0,55 0,53 0,53 0,53 0,53 0,56 0,58 0,64 0,70 0,66 0,62 0,62 0,62 0,62 0,64 0,66 0,74 0,80 0,74 0,66
2024-08-06 23:24:43 INFO y 25: 0,30 0,30 0,30 0,30 0,30 0,30 0,30 0,34 0,38 0,45 0,52 0,49 0,47 0,47 0,48 0,49 0,51 0,54 0,62 0,69 0,65 0,60 0,61 0,61 0,62 0,64 0,66 0,74 0,82 0,74 0,66
2024-08-06 23:24:43 INFO y 26: nan nan nan nan nan nan nan 0,18 0,26 0,37 0,45 0,42 0,40 0,41 0,42 0,43 0,47 0,50 0,59 0,67 0,63 0,59 0,59 0,60 0,61 0,64 0,66 0,75 0,83 0,75 0,66
2024-08-06 23:24:43 INFO y 27: 0,00 0,00 0,00 0,00 0,00 nan nan 0,18 0,26 0,37 0,46 0,44 0,41 0,44 0,46 0,48 0,52 0,56 0,65 0,73 0,69 0,65 0,66 0,68 0,69 0,72 0,75 0,84 0,92 0,84 0,75
2024-08-06 23:24:43 INFO y 28: 0,00 0,00 0,00 nan 0 nan -In 0,18 0,26 0,37 0,46 0,45 0,43 0,46 0,49 0,52 0,57 0,61 0,70 0,79 0,75 0,70 0,72 0,74 0,76 0,80 0,83 0,92 1,00 0,92 0,83
2024-08-06 23:24:43 INFO y 29: nan nan nan nan 0 nan nan 0,18 0,26 0,37 0,46 0,44 0,41 0,44 0,46 0,48 0,52 0,56 0,65 0,73 0,69 0,65 0,66 0,68 0,69 0,72 0,75 0,84 0,92 0,84 0,75
2024-08-06 23:24:43 INFO y 30: nan +In nan nan nan nan nan 0,18 0,26 0,37 0,45 0,42 0,40 0,41 0,42 0,43 0,47 0,50 0,59 0,67 0,63 0,59 0,59 0,60 0,61 0,64 0,66 0,75 0,83 0,75 0,66
I tried with blue iso white needle, which fails on both red and white. I will provide a github repo with working code and sample images tomorrow (github is acting up).
For now, here’s the full code (it’s hacky, but it’s just a POC): package org.whatever;import java.io.File;import java.util.ArrayList;impo - Pastebin.com
Here’s the full log: 2024-08-06 23:24:42 INFO 2024-08-06 23:24:42 INFO Match method: 32024-08-06 - Pastebin.com
Any hints?