我的目标只是检测座位,无论图像位于何处。为了使事情变得更简单这是将在屏幕上显示的唯一图像,但图像的位置可能会发生变化。用户可以向右,向左,向上移动,也可以显示部分图像。
我阅读了this thread,其中展示了如何“强制”图像以检测图像的子集,但是当我尝试它时 - 花了我100多秒来检测它(很长时间,虽然我“我不是在寻找实时的”而且,我认为我的挑战更简单。
问:我的方法应该是什么?我从来没有尝试过任何有关图像处理的东西,并准备好走这条路(如果它适用于此)。谢谢!
这是将在屏幕上显示的图像(可能只显示其中的一部分,说用户将其一直向右移动,它只显示带座位的后轮)
子集图像总是这样:
答案 0 :(得分:1)
给定javaCV和openCV this片段代码完成工作:
public class RunTest1
{
public static void main(String args[])
{
IplImage src = cvLoadImage("C:\\Users\\Nespresso\\Desktop\\cervelo.jpg",0);
IplImage tmp = cvLoadImage("C:\\Users\\Nespresso\\Desktop\\subImage.jpg",0);
IplImage result = cvCreateImage(cvSize(src.width()-tmp.width()+1, src.height()-tmp.height()+1), IPL_DEPTH_32F, 1);
cvZero(result);
//Match Template Function from OpenCV
cvMatchTemplate(src, tmp, result, CV_TM_CCORR_NORMED);
double[] min_val = new double[2];
double[] max_val = new double[2];
CvPoint minLoc = new CvPoint();
CvPoint maxLoc = new CvPoint();
//Get the Max or Min Correlation Value
cvMinMaxLoc(result, min_val, max_val, minLoc, maxLoc, null);
System.out.println(Arrays.toString(min_val));
System.out.println(Arrays.toString(max_val));
CvPoint point = new CvPoint();
point.x(maxLoc.x()+tmp.width());
point.y(maxLoc.y()+tmp.height());
cvRectangle(src, maxLoc, point, CvScalar.WHITE, 2, 8, 0);//Draw a Rectangle for Matched Region
cvShowImage("Lena Image", src);
cvWaitKey(0);
cvReleaseImage(src);
cvReleaseImage(tmp);
cvReleaseImage(result);
}
}