内部にいくつかの長方形を含む画像があります..必要なのは、(Java)またはJavaCVを使用して、赤い枠と白い背景を持つ長方形のみをトリミングすることです。
たとえば、ナンバー プレートの付いた車の画像があります。ナンバー プレートの各文字には、周囲に赤い縁取りの四角形と白い背景があります。
私が探しているのは、単一の画像で各文字をトリミングすることです..文字は、それぞれの周りの赤い枠付きの長方形と白い背景で識別されます。
助言がありますか?ありがとう
あなたはこれを試すかもしれません:
ボックスが中断されたり重なったりしない限り、これは機能するはずです。
色空間をHSVに変更
IplImage* imgHSV = cvCreateImage(cvGetSize(img), 8, 3);
cvCvtColor(img, imgHSV, CV_BGR2HSV);
色相チャネルのみを取得:
cvSplit( imgHSV, h_plane, s_plane, v_plane, 0 );
しきい値処理を行って赤色を見つけます。
cvInRangeS(h_plane, cvScalar(x, x, x), cvScalar(x, x, x), imgThreshed);
x - HSV カラー モデルの赤の範囲。
この後、白と黒の画像が作成されます。元の画像では白は赤です(あなたが言ったように、それらは長方形である必要があります)。
次に、cvFindContours 関数を使用します。
int contoursCont = cvFindContours( imgThreshed, storage,&contours,sizeof(CvContour),CV_RETR_LIST,CV_CHAIN_APPROX_SIMPLE,cvPoint(0,0));
境界ボックス (長方形) を使用するには (すべての輪郭に対して):
CvBox2D box = cvMinAreaRect2( @current_contour@,
CvMemStorage* storage CV_DEFAULT(NULL))
背景の色を確認するには、そのヒストグラムを計算し、ビンの値が 255 と 0 (白と黒の値) だけであるかどうかを確認します。
うまくいけば、それは役に立つでしょう!