示例#1
0
int main(int argc, char* argv[])
{
    // カメラ映像の幅と高さ
	int w = 640;
	int h = 480;
	Mat im, hsv, mask;					// 画像オブジェクトの作成
	LabelingBS labeling;				// ラベリング関連の変数
	RegionInfoBS *ri;
	short *mask2 = new short[w * h];//ラベリング出力先
	VideoCapture cap(0);				// カメラのキャプチャ
	if (!cap.isOpened()) return -1;		// キャプチャ失敗時のエラー処理

	while (1){
		cap >> im;								// カメラから画像を取得
		cvtColor(im, hsv, CV_BGR2HSV);			// 画像をRGBからHSVに変換
		inRange(hsv, Scalar(150, 70, 70), Scalar(360, 255, 255), mask);	// 色検出でマスク画像の作成
		// 白領域が無い場合のエラー処理
		rectangle(mask, Point(0, 0), Point(1, 1), Scalar(255),-1);
		//ラベリング処理
		labeling.Exec((uchar *)mask.data, mask2, w, h, true, 30);
		//最大の領域を四角で囲む
		ri = labeling.GetResultRegionInfo(0);
		int x1, y1, x2, y2;
		ri->GetMin(x1, y1);
		ri->GetMax(x2, y2);
		rectangle(im, Point(x1, y1), Point(x2, y2), Scalar(255, 0, 0), 3);
		imshow("Camera", im);					// カメラ映像の表示
		imshow("Mask", mask);					// マスク画像の作成
		if (waitKey(30) >= 0){					// 任意のキー入力があれば終了
			break;
		}
	}
	return 0;
}
示例#2
0
void TrickEstimater::labelContour(unsigned int contour_id, unsigned int rv_size)
{
	LabelingBS	labeling;
	bool at_is_sort_size_order = false;//óÃàÊÇÃëÂÇ´Ç≥èáÇ…É\Å[ÉgǵǻǢ
	int at_delete_size = 0;    //è¡ãéÇ∑ÇÈè¨óÃàÊÇÃç≈ëÂÉTÉCÉY(int) - DZÇÍà»â∫ÇÃÉTÉCÉYÇÃóÃàÊÇè¡ãéÇ∑ÇÈ
	unsigned char *src = new unsigned char[rv_size];
	short *result = new short[rv_size];
    
	for (int i = 0; i < rv_size; i++){
		src[i] = (unsigned char)is_sharp_angle[contour_id][i];
	}
	labeling.Exec(src, result, rv_size, 1, at_is_sort_size_order, at_delete_size);
	label_index_max = labeling.GetNumOfResultRegions();
    
	for (int i = 0; i < rv_size; i++){
		is_sharp_angle[contour_id][i] = (unsigned short)result[i];
	}
	for (int i = 0; i < label_index_max; i++){
		label_index[contour_id][i] = (labeling.GetResultRegionInfo(i))->GetResult();
	}
    
	delete[] src;
	delete[] result;
    
}
示例#3
0
void OpenCVAdapter::LabelFrame(){
	LabelingBS	labeling;
	labeling.Exec(label,labeled,xnum,ynum,true,trackbarPosition2);
	int n = labeling.GetNumOfResultRegions();
	printf("%d region found\n",n);
	for(int i=0;i<n;i++){
		RegionInfoBS *ri;
		ri=labeling.GetResultRegionInfo(i);
		float x,y;
		ri->GetCenterOfGravity(x,y);
		int px=(int)x*winx/width;
		int py=(int)y*winy/height;
		plist.push_back(make_pair((int)px,(int)py));
	}
}