tl;dr it's much better for publishers if you see ads but never click them vs blocking them.
Sure they can. How does the ad network know the ads are being served? It needs some sort of ad detection mechanism, so the ad blocker can implement it too.
I would also encourage new "good ad blockers" that only block bad ads (CPU/memory intense ads that crash your browser on iipad)
How does the ad network confirm the images being served are actually ads and not blank rectangles? It needs to visually confirm their content, which means there's some algorithm the blocker can use to identify ads.
(Why would a site serve blank rectangles? Simple: it'd allow them to serve ads from dozens of ad networks without making the site an unreadable mess)
Adblockers work with regex based on URL and usually block third party files (different domain) from ad networks.
Current adblockers work that way, since it's easier. They'd adapt. For example, Brand Killer[1] (aka Adblock for Real Life) already works by visual detection, and it would certainly be easier to do that online.
Your OpenCV prototype is simply too expensive (CPU, GPU, battery resources) on consumer hardware many more years.
A big, high-profile publisher would find it nearly impossible. As soon as they roll out code to lock out adblock uesrs, it would be circumvented in a filter update.