I think you need to go back a step, and review what a list and so forth is.
"c" is not a list. I can tell this, because you are assigning a single instance of an object to it:
c = new OCRChar(f,convertToBinary(img));
Therefore, it can't be used as an enumerable value in a foreach loop:
foreach (OCRChar c )
(Ignoring that the syntax for foreach doesn't look like that).
Step back, and look at what you are trying to do.
Add an emumerable object to your main form, so hold all the OCRChar instances - I would suggest that a List of OCRChar objects would be a good choice:
private List<OCRChar> ocrFiles = new List<OCRChar>();
Now, when you create a new instance, add it to the list:
foreach (string f in filenames)
img = (Bitmap)Bitmap.FromFile(f);
Then you can iterate through them later:
foreach (OCRChar c in ocrFiles)
At the moment, it looks like you are trying to code by guessing and hoping it works - that isn't a viable strategy! I strongly recommend that you go back a stage or two and look at the basics - get a good solid grasp of them first before you go much further. You are venturing into harder and harder territory and I can't see that you are going to do more than confuse and frustrate yourself unless you understand the simple stuff a lot better than you appear to now.