Depending on how robust this "detection" needs to be, the complexity of possible solutions to your problem may differ quite extensively. As you didn't mention robustness in your question, this is probably not an issue. Therefore, a rather simple solution could be:
- Extract the contours from the binary image (Canny) using
cv::findContours()
. - For each contour found, compare the number of contour points to the number of contour points you expect for the letter "E".
- If it matches, you've detected an "E".
If you need more robustness, you could:
- Add subsequent checks on the basis of the contour, e.g., moments, Hu moments.
- Further preprocessing steps, e.g., rotate the bounding box of candidate objects to some normalized orientation.
- Something completely different, e.g., Generalized Hough Transform (as in here: Image Processing: Algorithm Improvement for 'Coca-Cola Can' Recognition).
- I don't think SIFT or SURF would do here, because the object lacks an interesting texture pattern.