C++を使用してそれぞれの切り抜きを別々の画像に抽出するにはどうすればよいですか? (マイOpenCVのバージョン2.4.10)OPENCVを使用して、画像の切り取った部分を別々の画像に抽出します
Iは、ライセンスプレートの所望の大きさの幅/高さの比と一致するように輪郭を濾過してきました。 (3番目の画像 - 矩形3)
今私は "i"候補と同じサイズの別々の画像に "i"個の候補を抽出する必要があるので、文字を分割してOCRアルゴリズムを使用することができます。
この画像から所望の出力は次のようになります
2つの画像(理想的には、画像に示されるように、いくつかの余分な添加幅/高さで抽出された)をそれぞれ含むクロップバージョン 見つかった境界ボックスの 。
私は別々の画像を必要とするか、私は単にセグメント文字に順にだけトリミングされた部品を含む画像全体(と表示される画像のように黒い背景)で動作することができればそれは、私には疑問です。
私はここに私のコードの一部を提供しています:答えを提供するための三木へ
findContours(crop, contours, hierarchy, CV_RETR_TREE,
CV_CHAIN_APPROX_SIMPLE, Point(0, 0));
vector<Point2f> ContArea(contours.size());
for (int i = 0; i < contours.size(); i++) {
approxPolyDP(Mat(contours[i]), contours_poly[i], 3, true);
boundRect[i] = boundingRect(Mat(contours_poly[i]));
}
// Draw polygonal contour + filled bonding rects
Mat drawing4 = Mat::zeros(src_gray.size(), CV_8UC3);
for (int i = 0; i < contours.size(); i++) {
Scalar color = Scalar(rng.uniform(0, 255), rng.uniform(0, 255),
rng.uniform(0, 255));
rectangle(drawing4, boundRect[i].tl(), boundRect[i].br(), color,
CV_FILLED, 1, 0);
}
imshow("Rectangles4", drawing4);
float ratio;
Mat drawing3 = Mat::zeros(crop.size(), CV_8UC3);
// Draw bonding rects
for (int i = 0; i < contours.size(); i++) {
Scalar color = Scalar(0, 255, 0);
double a = contourArea(contours[i]);
ratio = (float) boundRect[i].width/(float) boundRect[i].height;
//check for min, max size of area and its ratios
if ((a > 200 && a < 2600) && ((ratio >= 1.3) && (ratio <= 10))) {
printf("a: %f ratios: %f", a, ratio);
//drawContours(drawing3, contours_poly, (int) i, color, 1, 8,
vector<Vec4i>(), 0, Point());
rectangle(drawing3, boundRect[i].tl(), boundRect[i].br(), color,
CV_FILLED, 1, 0);
}
}
imshow("Rectangles3", drawing3);
: 'マットcropped_image_i(original_image(BBOX))'、またはディープコピーについて: 'マットcropped_image_i = original_image(BBOX).clone( ) ' – Miki
これは素敵に動作するようです!どうもありがとう! 唯一の問題は、次のトリミングが最後のトリミングと重なっているように見えることです。 私はこれをこのように見せているのですか? imshow( "crops"、crops [j]); imshowで画像が表示されるだけでオーバーラップします 回答を追加します。 :) – Whatever