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; }
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; }
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)); } }