나는 진행중인 당구 게임 이미지를 가져 와서 다양한 볼의 위치를 감지하는 안드로이드 앱을 만들고 있습니다. 이미지는 다른 사람의 전화에서 가져온 것이므로 테이블의 완벽한 오버 헤드 뷰는 없습니다. 지금 나는 공을 찾기 위해 houghcircles를 사용하고 있습니다. 괜찮은 일을하고 있지만, 여기저기서 약간의 공을 놓친 것처럼 보이고 오탐이 있습니다.OpenCV로 당구 공 감지하기
내 가장 큰 문제는 바로 테이블 밖에서 발견되는 오 탐지를 줄이는 방법입니다. ROI를 사용하여 이미지의 윗부분을 잘라내는데 대부분 공간이 낭비되기 때문에 작게 만들 수는 없으며 사다리꼴이기 때문에 테이블의 일부를 잘라낼 위험이 있습니다. 나의 현재 아이디어는 사용자가 이미지 위에 그림을 찍을 때 보는 가이드를 오버레이하는 것이지만, 그 문제는 카메라의 해상도가 무엇인지 모르기 때문에 오버레이가 포함될 수 있다는 것입니다. 잘못된 지점을 찾아라. 이상적으로 나는 houghlines를 사용하고 싶을 것이라고 생각하지만, 시도했을 때 내 앱이 추억의 부족이라고 생각한 것에서 추락했다. 어떤 아이디어? 여기
내가지고있어 결과에 대한 링크입니다 : 여기http://graphiquest.com/cvhoughcircles.html
내 코드입니다 :IplImage img = cvLoadImage("/sdcard/DCIM/test/picture"+i+".jpg",1);
IplImage gray = opencv_core.cvCreateImage(opencv_core.cvSize(img.width(), img.height()), opencv_core.IPL_DEPTH_8U, 1);
cvCvtColor(img, gray, opencv_imgproc.CV_RGB2GRAY);
cvSetImageROI(gray, cvRect(0, (int)(img.height()*.15), (int)img.width(), (int)(img.height()-(img.height()*.20))));
cvSmooth(gray,gray,opencv_imgproc.CV_GAUSSIAN,9,9,2,2);
Pointer circles = CvMemStorage.create();
CvSeq seq = cvHoughCircles(gray, circles, CV_HOUGH_GRADIENT, 2.5d, (double)gray.height()/30, 70d, 100d, 0, 80);
for(int j=0; j<seq.total(); j++){
CvPoint3D32f point = new CvPoint3D32f(cvGetSeqElem(seq, j));
float xyr[] = {point.x(),point.y(),point.z()};
CvPoint center = new CvPoint(Math.round(xyr[0]), Math.round(xyr[1]));
int radius = Math.round(xyr[2]);
cvCircle(gray, center, 3, CvScalar.GREEN, -1, 8, 0);
cvCircle(gray, center, radius, CvScalar.BLUE, 3, 8, 0);
}
String path = "/sdcard/DCIM/test/";
File photo=new File(path, "picture"+i+"_2.jpg");
if (photo.exists())
{
photo.delete();
}
cvSaveImage("/sdcard/DCIM/test/picture"+i+"_2.jpg", gray);
헤이 vince88. 이 프로젝트를 완료 한 적이 있습니까? 소스 코드를 오픈 소스로 사용 했습니까? 나는 지금 막 비슷한 것을 시작하려고했다. – m1ket