00001 #include "blobs.h"
00002
00003 Blobs::Blobs(Ui::mainFrameClass pui) {
00004 ui=pui;
00005 }
00006
00007 Blobs::~Blobs() {}
00008
00012 IplImage* Blobs::applyBlobslib(IplImage* src){
00013 IplImage *dst_image=cvCreateImage( cvGetSize(src), 8, 3 );
00014
00015 blobResult = CBlobResult(src, NULL, 0);
00016
00017
00018
00019 int iMinArea=(ui.leBlobsMinArea->text()).toInt();
00020 int iMaxArea=(ui.leBlobsMaxArea->text()).toInt();
00021 blobResult.Filter( blobResult, B_INCLUDE, CBlobGetArea(), B_GREATER, iMinArea );
00022 blobResult.Filter( blobResult, B_INCLUDE, CBlobGetArea(), B_LESS, iMaxArea );
00023
00024
00025
00026 float fMinRough=(ui.leBlobsMinRough->text()).toFloat();
00027 float fMaxRough=(ui.leBlobsMaxRough->text()).toFloat();
00028 blobResult.Filter(blobResult, B_INCLUDE, CBlobGetRoughness(), B_GREATER, fMinRough );
00029 blobResult.Filter(blobResult, B_INCLUDE, CBlobGetRoughness(), B_LESS, fMaxRough );
00030
00031
00032 if (ui.comboLog->currentIndex()>0)
00033 ui.txInform->append(QString("Applying cblobslib: Min Area %1, Max Area %2, Min Rough %3, Max Rough %4")
00034 .arg(iMinArea).arg(iMaxArea).arg(fMinRough).arg(fMaxRough));
00035
00036
00037 int blobsNum=blobResult.GetNumBlobs();
00038 CBlob blob;
00039
00040 cvCvtColor( src, dst_image, CV_GRAY2BGR );
00041 cvReleaseImage(&src);
00042
00043 for( int j = 0; j < blobsNum; j++ ) {
00044 blob=blobResult.GetBlob(j);
00045
00046
00047
00048
00049 printBorders(blob,dst_image);
00050
00051 CvFont font;
00052 cvInitFont(&font, CV_FONT_HERSHEY_SIMPLEX, 0.4, 0.4, 0, 1, CV_AA);
00053 QString qID=QString("%1").arg(j);
00054 QByteArray ba = qID.toLatin1();
00055 const char *cqID = ba.data();
00056
00057 cvPutText(dst_image,cqID,cvPoint((blob.MinX() + ((blob.MaxX() - blob.MinX())/3)),(blob.MinY() + ((blob.MaxY() - blob.MinY())/3)))
00058 ,&font,CV_RGB(0, 255, 0));
00059 }
00060 return dst_image;
00061 }
00062
00066 void Blobs::printBorders(CBlob blob, IplImage* dst_image){
00067
00068 CvScalar rectangleColor=CV_RGB(0, 0, 255);
00069
00070 int iMaxx, iMinx, iMaxy, iMiny;
00071 iMaxx=(int)blob.MaxX(); iMinx=(int)blob.MinX(); iMaxy=(int)blob.MaxY(); iMiny=(int)blob.MinY();
00072
00073 cvRectangle( dst_image, cvPoint(iMinx , iMiny ), cvPoint ( iMaxx, iMaxy ),rectangleColor, 1, 8, 0);
00074 }
00075
00076 CBlobResult Blobs::getBlobs(){
00077 return blobResult;
00078 }