Last night I thought I invented something new, something nobody ever thought of, something incredible, that would surely change the world. What if QR code, but RGB? Turns out there are already multiple solutions and implementations for this thing available, like this 3 year old repo or this article on Hackaday. This discouraged me a little, seeing nobody actually uses these, however none of these are quite like what I imagined, so I tried to do my own thing. I shall call it 3DQR.
What I want is 3 distinct QR codes in place of 1. This is easily achievable if I take the individual channels of an RGB image and insert different QR codes in each channel. On the reader side, in theory I can just split the camera image to RGB and run each channel through a QR code detector separately. I went on to generate 3 QR codes with some online tool and merged them together in Photoshop, which produced this colorful thing:
I then took a picture of the screen with my phone and tried to see if I can split the QR code apart from that. It worked reasonably well, the green channel was a bit finicky for some reason, but a bit of contrast enhancement helped.
Confirming that this works, I whipped up a little web “app” that does this with OpenCV.js. Turns out it has a QR code decoder in it too, so one less thing to worry about. The resulting application is slow and wonky at best and not optimized at all - heck, OpenCV takes up like 10MB, but I’m certain this could be improved if someone wants to.
Now the big question: Why? What is this good for? I don’t know. The only things I can think of are multiplatform application quick links, like Android scans the green channel, iOS scans the blue channel, and the red is fallback. Or for multiple payment processors.
Anyway, Sun’s out, I’m going outside.