So, following Rich's advice, I've added my own "cooked" mode to PixyMon, by copy-pasting the code from the cccblobs module (since that was the one that was obviously working). This is my usual approach with anything this complicated: copy and gradually modify.
Now, I think understand the basic logic of these modules:
(1) The module's constructor calls a class from the common folder (e.g. Blobs), passing the common class a pointer to the queue of qvals (four-tuples) that the module will create
(2) One of the module's render methods (like renderCMV2()) calls the rls() method, which in turn calls handleLine()
(3) handleLine() runs on each line of the image, processing pixels and queuing up qvals (four-tuples)
(4) After the qvals are queued up, the render method calls the common class's workhorse function (Blobs::blobify())
(5) The workhorse function dequeues the qvals and processes them (Blobs:runlengthAnalysis())
So here's my question: how much of the algorithm-specific work is done in the PixyMon module (handleLine()) and how much in the common code (runlengthAnalysis()) ? Obviously it will be easier if most of the work is done in the common code (Blobs), but I'm unfamiliar with content of the qvals, how they're constructed, etc.
Any tips would be appreciated!