OpenCVライブラリのJavaCVラッパーを調べたところ、Javaでそのライブラリを使用して画像の顔を検出できることがわかりましたが、そのライブラリを使用して画像のトラフィック警告サインを検出できるのではないかと思いました。どうやって?
http://www.4shared.com/photo/5QxoVDwd/041.htmlのように道路から撮影した写真が あり、検出結果は次のようになります:http://www.4shared。 com / photo / z_pL0lSK / overlay-0.html
編集: 私が赤い色を検出した後、私はこの画像を取得します:
また、警告サインの三角形の形状だけを検出し、他のすべての形状を無視するのに問題があります。cvUsingPolyパラメーターを変更しようとしましたが、結果がありませんでした。これは私のコードです:
public void myFindContour(IplImage image)
{
IplImage grayImage = cvCreateImage(cvGetSize(image), IPL_DEPTH_8U, 1);
cvCvtColor(image, grayImage, CV_BGR2GRAY);
CvMemStorage mem;
CvSeq contours = new CvSeq();
CvSeq ptr = new CvSeq();
cvThreshold(grayImage, grayImage, 150, 255, CV_THRESH_BINARY);
mem = cvCreateMemStorage(0);
cvFindContours(grayImage, mem, contours, Loader.sizeof(CvContour.class) , CV_RETR_CCOMP, CV_CHAIN_APPROX_SIMPLE, cvPoint(0,0));
Random rand = new Random();
while (contours != null && !contours.isNull()) {
if (contours.elem_size() > 0) {
CvSeq points = cvApproxPoly(contours, Loader.sizeof(CvContour.class),
mem, CV_POLY_APPROX_DP, cvContourPerimeter(contours)*0.02, 0);
Color randomColor = new Color(rand.nextFloat(), rand.nextFloat(), rand.nextFloat());
CvScalar color = CV_RGB( randomColor.getRed(), randomColor.getGreen(), randomColor.getBlue());
cvDrawContours(image, points, color, CV_RGB(0,0,0), -1, CV_FILLED, 8, cvPoint(0,0));
}
contours = contours.h_next();
}
cvSaveImage("myfindcontour.png", image);
}
これは私が得る出力です(私はすべての形に異なる色を使用しましたが、最終的な出力では、検出された警告サインに白のみを使用し、他のすべては黒のままにします):