How force launchd not to look into subfolders with QueueDirectories parameter in launchd.plist
QueueDirectories won't work anyway, because it'd trigger on the subdirectories themselves whether or not they had any files in them. The mere existence of subdirectories in the watched directories will trigger the script.

Instead, you should use WatchPaths on the main directory itself -- whenever a new image file is added to the directory, the directory is modified, so WatchPaths will trigger your script to process the file. Moving the image file will modify the directory again, but since it happens while your script is running it won't trigger a rerun.