日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

OpenCV:Adaboost训练时数据扩增

發(fā)布時間:2023/12/31 编程问答 27 豆豆
生活随笔 收集整理的這篇文章主要介紹了 OpenCV:Adaboost训练时数据扩增 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

??????? 更準確的模型需要更多的數(shù)據(jù),對于傳統(tǒng)非神經(jīng)網(wǎng)絡(luò)機器學習方法,不同的特征需要有各自相符合的數(shù)據(jù)擴增方法。


1.?? 在使用opencv_traincascade.exe 過程中,圖像讀取在

???????? classifier.train ->? updateTrainingSet( requiredLeafFARate, tempLeafFARate )->fillPassedSamples( 0, numPos, true, 0, posConsumed )->imgReader.getPos( img ) :? imgReader.getNeg( img )過程中。


2. 在進行數(shù)據(jù)增強的過程中,從createSample開始,保證vecFile和樣本數(shù)目長度一致。

修改代碼段依次為:

//int cvCreateTrainingSamplesFromInfoRf(const char* infoname, const char* vecfilename, int cvCreateSamplesPlus(const char* infoname, const char* vecfilename,?int num,int showsamples,int winwidth, int winheight) {CvEnhanseData????? enhanser;char fullname[PATH_MAX];char* filename;FILE* info;FILE* vec;//IplImage* src = 0;//IplImage* sample;cv::Mat src, sample;int line;int error;int i;int x, y, width, height;int total;assert(infoname != NULL);assert(vecfilename != NULL);total = 0;if (!icvMkDir(vecfilename)){#if CV_VERBOSEfprintf(stderr, "Unable to create directory hierarchy: %s\n", vecfilename); #endif /* CV_VERBOSE */return total;}info = fopen(infoname, "r");if (info == NULL){#if CV_VERBOSEfprintf(stderr, "Unable to open file: %s\n", infoname); #endif /* CV_VERBOSE */return total;}vec = fopen(vecfilename, "wb");if (vec == NULL){#if CV_VERBOSEfprintf(stderr, "Unable to open file: %s\n", vecfilename); #endif /* CV_VERBOSE */fclose(info);return total;}//sample = cvCreateImage(cvSize(winwidth, winheight), IPL_DEPTH_8U, 1);icvWriteVecHeader(vec, num, winwidth, winheight);if (showsamples){cvNamedWindow("Sample", CV_WINDOW_AUTOSIZE);}strcpy(fullname, infoname);filename = strrchr(fullname, '\\');if (filename == NULL){filename = strrchr(fullname, '/');}if (filename == NULL){filename = fullname;}else{filename++;}for (line = 1, error = 0, total = 0; total < num; line++){int count;error = (fscanf(info, "%s %d", filename, &count) != 2);if (!error){//src = cvLoadImage(fullname, 0);//error = (src == NULL);src = cv::imread(fullname, 0);error = (src.data == NULL);if (error){#if CV_VERBOSEfprintf(stderr, "Unable to open image: %s\n", fullname); #endif /* CV_VERBOSE */}}for (i = 0; (i < count) && (total < num); i++, total++){error = (fscanf(info, "%d %d %d %d", &x, &y, &width, &height) != 4);if (error) break;//cvSetImageROI(src, cvRect(x, y, width, height));//cvResize(src, sample, width >= sample->width &&height >= sample->height ? CV_INTER_AREA : CV_INTER_LINEAR);cv::resize(src, sample, cv::Size(winwidth,winheight));//if (showsamples)//{//?? ?cvShowImage("Sample", sample);//?? ?if (cvWaitKey(0) == 27)//?? ?{//?? ??? ?showsamples = 0;//?? ?}//}//icvWriteVecSample(vec, sample);{int extNum = 7;//IplImage* sample2 = cvCreateImage(cvGetSize(sample), IPL_DEPTH_8U, sample->nChannels);//cvCopyImage(sample, sample2);std::vector<cv::Mat > imgLIst(extNum);cv::Mat inMat(sample);//此句導(dǎo)致占用釋放錯誤enhanser.EnhanceData(inMat, extNum, 1, imgLIst);for (int i = 0; i < extNum; ++i){//把Mat 生成移除來//已不必要//IplImage* sampleT = nullptr;// = nullptr;//*sampleT = IplImage(imgLIst[i]);//icvWriteVecSample(vec, sampleT);icvWriteVecSamplePlus(vec,imgLIst[i]);//if (sampleT)//{//?? ?cvReleaseImage(&sampleT);//}}}}//if (src)//{//?? ?cvReleaseImage(&src);//}if (error){#if CV_VERBOSEfprintf(stderr, "%s(%d) : parse error", infoname, line); #endif /* CV_VERBOSE */break;}}//if (sample)//{//?? ?cvReleaseImage(&sample);//}fclose(vec);fclose(info);return total; }
修改函數(shù):void icvWriteVecSample

//對每個圖像寫入正樣本Vec void icvWriteVecSamplePlus(FILE* file, cv::Mat &sample) {//CvMat* mat, stub;int r, c;short tmp;uchar chartmp;//mat = cvGetMat(sample, &stub);chartmp = 0;fwrite(&chartmp, sizeof(chartmp), 1, file);for (r = 0; r < sample.rows; r++){for (c = 0; c < sample.cols; c++){//tmp = (short)(CV_MAT_ELEM(*mat, uchar, r, c));tmp = (short)(sample.at<unsigned char>(r,c));fwrite(&tmp, sizeof(tmp), 1, file);}} }
使用C++語言替換掉使用C語言的版本。

同時對生成新的Vec增加int extNum = 7;倍。

總結(jié)

以上是生活随笔為你收集整理的OpenCV:Adaboost训练时数据扩增的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。