Looking at this image there seems to be some black junk hitting the big square in the lower right corner. There are a couple critical areas where what looks like minor damage will prevent it from reading QR codes and that's one of them. In the
performance test, you can see BoofCV doesn't do as well in the "damaged" category. I was actually able to read that using the Android app, but it was erratic. Also, you shouldn't need to threshold. The very first step it thresholds the image and its internal algorithm is highly configurable. I've got ideas how to handle this situation but focused on other areas.