Пример #1
0
bool RecgWeightedHoughForest(int *binNum, int *itemIdx, cv::Mat color, cv::Mat Sub, double *workPos, double *score, std::vector<int>& WHFClusterIdx ){
	//関数をvoid型からbool型に変更+ cv::Mar Subと WHF_cluster_idx を引数に追加 2015.04.26村田

		int bin,itemNum;
		int *ref_num;
		int refNum;

		cv::Mat testImage;
		//1チャンネルのグレーススケール画像を作成
		cv::cvtColor(color,testImage,CV_BGR2GRAY,1);
		bin=*binNum;
		itemNum=*itemIdx;

		//処理後書き換わってしまうので深いコピー
		cv::Mat Sub2 = Sub.clone();
		cv::Mat opening = Sub.clone();
		Detector detector;
		//入力画像のスケールをWHFcommon.hで定義したSCALEの値に変換(チャレンジ当日のスケールにあわせて調整)
		resize(testImage, testImage, Size() , SCALE, SCALE, INTER_CUBIC);
		resize(opening, opening, Size() , SCALE, SCALE, INTER_CUBIC);
		cv::erode(opening, opening, cv::Mat(), cv::Point(-1,-1), 2);//膨張収縮によるノイズ・穴の削減 村田
		cv::dilate(opening, opening, cv::Mat(), cv::Point(-1,-1), 4);
		//cv::erode(opening, opening, cv::Mat(), cv::Point(-1,-1), 1);
		//検出用関数
		detector.computeError(bin,itemNum,testImage,opening,workPos,score,ref_num);//リファレンス番号を返すように変更 村田


		//リファレンスの確認 ポインタ型です。村田
		std::cout<<"ref"<<*ref_num<<std::endl;;

		//LOG書き出しの判定
		#ifdef LOGMODE
		std::ofstream ofs( "./WHF_LOG.txt" ,std::ios::app);
		ofs<<"binNum="<<bin<<"\titemIdx="<<itemNum<<"\tworkPos="<<workPos[0]<<","<<workPos[1]<<"\tscore="<<*score<<"\tref_num="<<*ref_num<<std::endl;
		ofs.close();
		#endif
		
		cv::Mat WHFCluster( HEIGHT, WIDTH, CV_8UC1, cv::Scalar(0) );
		//セグメンテーション
		refNum = *ref_num;

		//入力部分書き換え(金子)
		WHFCluster = item_segmentation(Sub, (int)workPos[0], (int)workPos[1], itemNum, refNum);

		int	cnt;
		cnt =0;
		for( int i=0 ; i<WIDTH*HEIGHT ; i++ ){
			if(	Sub2.data[i] != 0 ){
				if( WHFCluster.data[i] != 0 ){
					WHFClusterIdx.push_back( cnt );
				}
				cnt++;
			}
		}

		cv::imwrite("function_test.bmp", WHFCluster);


		return true;
}