Witam, tworzę dość rozbudowaną aplikację, ale póki co utknęłam w jednym miejscu. Mianowicie na wykrywaniu koła na obrazie. Korzystam z bibliotek javacv i opencv w srodowisku NetBeans 7.1. Z samym wykryciem koła na obrazie problemu nie ma bo metoda działa bez problemu, gdy podaję ścieżkę do konkretnego obrazu. Chciałabym jednak aby działała do wduszeniu przycisku na każdym, WCZESNIEJ ZALADOWANYM ZDJECIU. Ponizej wrzucę kawałek kodu, odpowiedzialny za to wykrywanie. Proszę o pomoc - co robię źle? pozdrawiam
public void actionPerformed(ActionEvent e) {
Object source = e.getSource();
if (source == load) {
String sciezka = tekst.getText();
if ((sciezka != null) && (sciezka.length() > 0)) {
IplImage image = cvLoadImage(sciezka);
final CanvasFrame canvas = new CanvasFrame("ramka");
canvas.showImage(image);
canvas.setDefaultCloseOperation(javax.swing.JFrame.EXIT_ON_CLOSE);
} else {
JOptionPane.showMessageDialog(this, "Nie podano ścieżki");
}
}
if (source == wykryj) {
IplImage src = image;
IplImage gray = cvCreateImage(cvGetSize(src), 8, 1);
cvCvtColor(src, gray, CV_BGR2GRAY);
cvSmooth(gray, gray, CV_GAUSSIAN, 3);
opencv_core.CvMemStorage mem = opencv_core.CvMemStorage.create();
opencv_core.CvSeq circles = cvHoughCircles(
gray, //Input image
mem, //Memory Storage
CV_HOUGH_GRADIENT, //Detection method
1, //Inverse ratio
100, //Minimum distance between the centers of the detected circles
100, //Higher threshold for canny edge detector
100, //Threshold at the center detection stage
15, //min radius
500);
for (int i = 0; i < circles.total(); i++) {
opencv_core.CvPoint3D32f circle = new opencv_core.CvPoint3D32f(cvGetSeqElem(circles, i));
opencv_core.CvPoint center = cvPointFrom32f(new opencv_core.CvPoint2D32f(circle.x(), circle.y()));
int radius = Math.round(circle.z());
cvCircle(src, center, radius, opencv_core.CvScalar.GREEN, 6, CV_AA, 0);
}
cvShowImage("Result", src);
cvWaitKey(0);
}