Hi, okay, 640x480 runs at 20 fps actually if only using find_blob() in grayscale. If you are in RGB565 it’s slower.
Keep in mind that the frame buffer display cuts the frame rate. So, if you click the disable frame buffer button in the IDE you will see your FPS jump. This is the frame rate your actual algorithm in real life will get.
Finally, the find_circles() method can run on a 640x480 image if you use the ROI feature to only select a sub set of the pixels in the array. find_blobs() similarly speeds usp if you do this too.
So, what’s your algorithm steps. Do you need to process the entire image? If not, and you only need a particular part then select that area in the IDE frame buffer, you will see a x,y,w,h value under the frame buffer. Then pass that value as a tuple to the roi= argument in find_blobs() this will greatly reduce the work find_blobs() has to do. Then, you can also pass the x_stride and y_stride options to further speed up the processing of the image. x_stride and y_stride allow find_blobs() to search less pixels for the starting point of a blob. However, the algorithm is still pixel accurate when connecting all pixels within a blob.
As for find_circles(), if you use find_blobs() to find the initial blob you can then call find_circles() on the blob ROI to skip having to process the whole image. Additionally, you can specify a minimum and maximum radius for the method to look for greatly increasing the algorithms speed since it will no longer hace to search for all radisues possible in an ROI.
(ROI means region of interest).
Anyway, there are tricks you can do to speed things up and reduce memory usage. I think find_circles() also supports the stride arguments.