dat*_*ent 6 opencv image-processing
OpenCV有一些教程涉及尝试检测实时视频流中的模式.例如:
http://docs.opencv.org/doc/tutorials/objdetect/cascade_classifier/cascade_classifier.html
但是,这并不是我想要做的.我有静态图像,例如.jpgs,包括2D条形码.
我的目标是从图像中隔离一个或多个2D条形码.如果.jpg是1000像素乘500像素,而2D条形码只是200像素乘200像素,我只想将200x200像素样本保存到输出文件中.
我怀疑这需要Haar级联或LBP级联.我怀疑功能检测无法做到这一点.
但是,我找不到任何解决此问题的教程.
此外,opencv发行版自动构建一些似乎相关的可执行文件,例如opencv_perf_objdetect和opencv_test_objdetect,但它们似乎与教程相对应,也不与文档中的任何其他内容相对应.
问题:OpenCV文档中某处是否实际解释了静态图像中如何检测子图像的问题?如果是的话,在哪里?
谢谢.
老实说,用级联检测某些东西的基本过程很简单。
没关系,如果你有 haar、lbp 或 hog,也不管你是否在面部、香蕉或条形码上训练它,它只会尝试本地化它所训练的东西。
// first load the cascade
string cascade_file = "my_barcode.xml";
CascadeClassifier cascade;
if( !cascade.load( cascade_filee ) ){ printf("Error loading cascade\n"); return -1; };
// then we need a test image, should be grayscale (but will get converted internally if not)
Mat img = imread("mybar.png", 0); // 0==>"load gray"
if ( img.empty() ) { /* only fools don't check resource loading */ }
// now we can check if it found something, we'll get a Rect for each found item:
std::vector<Rect> rects;
cascade.detectMultiScale( img, rects, 1.1, 2, 0|CASCADE_SCALE_IMAGE, Size(30, 30) );
for ( size_t i = 0; i < rects.size(); i++ )
// do something with rects[i] ...
// i.e. filter for the largest boundingRect()
// Mat subimg = img(rects[i]); // 'cropped' subimage
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
6525 次 |
| 最近记录: |