Active6 months ago
I am developing an application to read the letters and numbers from an image using opencv in c++. I first changed the given colour image and colour template to binary image, then called the method cvMatchTemplate(). This method just highlighted the areas where the template matches. But not clear. I just dont want to see the area. I need to parse the characters(letters & numbers) from the image. I am new to openCV. Does anybody know any other method to get the result??
- Building Computer Vision Projects with OpenCV 4 and C: Implement complex computer vision algorithms and explore deep learning and face detection by David Millan Escriva. Read online, or download in DRM-free PDF or DRM-free ePub (digitally watermarked) format.
- Learning OpenCV 3 (PDF) puts you in the middle of the expanding field of computer vision. Written by the creators of the free open source OpenCV library, this Computer Vision in C with the OpenCV Library introduces you to computer vision and demonstrates how you can quickly build applications that enable computers to see and make decisions based on that data.
. OpenCV provides simple and useful ways to read and write images. Note that there are many extra options to these commands which are available on the wiki. waitKey( int x ) has two main features. if x 0, then waitKey will wait x milliseconds - if x = 0, then waitKey will not move until key is pressed.Examples //Read an image.
![Opencv read jpg Opencv read jpg](/uploads/1/2/4/8/124800546/438937531.png)
Image is taken from camera. the sample image is shown above. I need to get all the texts from the LED display(130 and Delft Tanthaf).
Friends I tried with the sample application of face detection, It detects the faces. the HaarCascade file is provided with the openCV. I just loaded that file and called the method cvHaarDetectObjects(); To detect the letters I created the xml file by using the application letter_recog.cpp provided by openCV. But when I loading this file, it shows some error(OpenCV error: UnSpecified error > in unknown function, file ....ocvopencvsrccxcorecxpersistence.cpp,line 4720). I searched in web for this error and got the information about lib files used. I did so, but the error still remains. Is the error with my xml file or calling the method to load this xml file((CvHaarClassifierCascade*)cvLoad('builded xml file name',0,0,0);)?? please HELP..
Thanks in advance
asifkt
asifktasifkt34322 gold badges77 silver badges2121 bronze badges
5 Answers
As of OpenCV 3.0 (in active dev), you can use the built-in 'scene text' object detection module ~
- Reference: http://docs.opencv.org/3.0-beta/modules/text/doc/erfilter.html
- Example: https://github.com/Itseez/opencv_contrib/blob/master/modules/text/samples/textdetection.cpp
The text detection is built on these two papers:
- [Neumann12] Neumann L., Matas J.: Real-Time Scene Text Localizationand Recognition, CVPR 2012. The paper is available online athttp://cmp.felk.cvut.cz/~neumalu1/neumann-cvpr2012.pdf
- [Gomez13] Gomez L. and Karatzas D.: Multi-script Text Extraction fromNatural Scenes, ICDAR 2013. The paper is available online athttp://refbase.cvc.uab.es/files/GoK2013.pdf
Once you've found where the text in the scene is, you can run any sort of standard OCR against those slices (Tesseract OCR is common). And there's now an end-to-end sample in opencv using OpenCV's new interface to Tesseract:
Kaolin FireKaolin Fire
Template matching tend not to be robust for this sort of application because of lighting inconsistencies, orientation changes, scale changes etc. The typical way of solving this problem is to bring in machine learning. What you are trying to do by training your own boosting classifier is one possible approach. However, I don't think you are doing the training correctly. You mentioned that you gave it 1 logo as a positive training image and 5 other images not containing the logo as negative examples? Generally you need training samples to be in the order of hundreds or thousands or more. You cannot possibly train with 6 training samples and expect it to work.
If you are unfamiliar with machine learning, here is roughly what you should do:
1) You need to collect many positive training samples (from hundred onwards but generally the more the merrier) of the object you are trying to detect. If you are trying to detect individual characters in the image, then get cropped images of individual characters. You can start with the MNIST database for this. Better yet, to train the classifier for your particular problem, get many cropped images of the characters on the bus from photos. If you are trying to detect the entire rectangular LED board panel, then use images of them as your positive training samples.
2) You will need to collect many negative training samples. Their number should be in the same order as the number of positive training samples you have. These could be images of the other objects that appear in the images you will run your detector on. For example, you could crop images of the front of the bus, road surfaces, trees along the road etc. and use them as negative examples. This is to help the classifier rule out these objects in the image you run your detector on. Hence, negative examples are not just any image containing objects you don't want to detect. They should be objects that could be mistaken for the object you are trying to detect in the images you run your detector on (at least for your case).
![Caligula x version full movie watch Caligula x version full movie watch](/uploads/1/2/4/8/124800546/567635213.jpg)
See the following link on how to train the cascade of classifier and produce the XML model file: http://note.sonots.com/SciSoftware/haartraining.html
Even though you mentioned you only want to detect the individual characters instead of the entire LED panel on the bus, I would recommend first detecting the LED panel so as to localize the region containing the characters of interest. After that, either perform template matching within this smaller region or run a classifier trained to recognize individual characters on patches of pixels in this region obtained using sliding window approach, and possibly at multiple scale. (Note: The haarcascade boosting classifier you mentioned above will detect characters but it won't tell you which character it detected unless you only train it to detect that particular character..) Detecting characters in this region in a sliding window manner will give you the order the characters appear so you can string them into words etc.
Hope this helps.
Free screen sharing using Screenleap. The fast, simple, and free way to share your screen instantly for online meetings, sales demos, and collaboration. Screen sharing is the process of giving another computer user access to a computer screen. No matter with the use of ezTalks free screen sharing software or other paid screen sharing software, collaborating, conducting a meeting, and even socializing is now made convenient. Free screen share open source. Free Screen Sharing, Audio and Video conferencing, Chat right from the browser without Login or Signup. Share your screen with multiple people and conduct online meetings, webinars, sales presentation and online tutoring for free.
I happened to chance upon this old post of mine after separately discovering the scene text module in OpenCV 3 mentioned by @KaolinFire.
For those who are curious, this is the result of running that detector on the sample image given by the OP. Notice that the detector is able to localize the text region, even though it returns more than one bounding box.
Now you will say that how it is different, then let me clear you, I will show you some screenshots of this installment and then you will understand how different it is. WWE All Stars is a wrestling installment and this is the only version that is different from all others. So this installment is the 5th in wrestling series and it is totally different from all others. Previously in the wrestling category I uploaded WWE 2k14 and if you want to, then please move toward this page. Free wwe all stars game. WWE All Stars PC Game Screenshots.
Note that this method is not foolproof (at least this implementation in OpenCV with the default parameters). It tends to generate false-positives, especially when the input image contains many 'distractors'. Here are more examples obtained using this OpenCV 3 text detector on the Google Street View dataset:
Notice that it has a tendency to find 'text' between parallel lines (e.g., windows, walls etc). Since the OP's input image is likely going to contain outdoor scenes, this will be a problem especially if he/she does not restrict the region of interest to a smaller region around the LED signs.
It seems that if you are able to localize a 'rough' region containing just the text (e.g., just the LED sign in the OP's sample image), then running this algorithm can help you get a tighter bounding box. But you will have to deal with the false-positives though (perhaps discarding small regions or picking among the overlapping bounding boxes using a heuristic based on knowledge about the way letters appear on the LED signs).
Here are more resources (discussion + code + datasets) on text detection.
Code
Datasets
You will find the google streetview and MSRA datasets here. Although the images in these datasets are not exactly the same as the ones for the LED signs on buses, they may be helpful either for picking the 'best' performing algorithm from among several competing algorithms, or to train a machine learning algorithm from scratch.
Community♦
lightalchemistlightalchemist7,46733 gold badges3636 silver badges5050 bronze badges
See my answer to How to read time from recorded surveillance camera video? You can/should use
cvMatchTemplate()
to do that.Community♦
Adi ShavitAdi Shavit12.1k11 gold badge5050 silver badges103103 bronze badges
Opencv C++ Pdf
If you are working with a fixed set of bus destinations, template matching will do.
However, if you want the system to be more flexible, I would imagine you would need some form of contour/shape analysis for each individual letter.
kylestephenskylestephens
You can also look at EAST: Efficient Scene Text Detector - https://www.learnopencv.com/deep-learning-based-text-detection-using-opencv-c-python/Under this link, you have examples with C++ and Python. I used this code to detect numbers of buses (after detecting that given object is a bus).
ArturArtur
Not the answer you're looking for? Browse other questions tagged opencv or ask your own question.
Active6 years, 8 months ago
Is it possible to convert a PDF file to
cv::Mat
?I know that PDF file is generally vector of objects, but given a required resolution. Is there any tool that can do such a conversion?Opencv Read Pdf Download
ArtemStorozhuk7,77544 gold badges2626 silver badges4747 bronze badges
MercuryMercury97611 gold badge1616 silver badges3535 bronze badges
1 Answer
OpenCV doesn't support pdf format at all, so you should convert pdf page to image using another library. Read this discussion: Open source PDF library for C/C++ application?
Also this question is similar to yours: What C++ library can I use to convert a PDF to an image on windows?
Community♦
ArtemStorozhukRead Pdf Online
ArtemStorozhuk7,77544 gold badges2626 silver badges4747 bronze badges