Java 是否绘制检测到的对象的形状?
我成功地在一张照片中发现了那个人的上半身。但我现在能做的就是在上半身周围画一个矩形。如何跟踪上半身?即,在检测到的上半身周围画一条线(看起来像上半身)。我正在使用OpenCV。 这是检测系统的一些代码Java 是否绘制检测到的对象的形状?,java,opencv,drawing,computer-vision,Java,Opencv,Drawing,Computer Vision,我成功地在一张照片中发现了那个人的上半身。但我现在能做的就是在上半身周围画一个矩形。如何跟踪上半身?即,在检测到的上半身周围画一条线(看起来像上半身)。我正在使用OpenCV。 这是检测系统的一些代码 if(new File("E:\\OpenCV\\opencv\\data\\haarcascades\\haarcascade_mcs_upperbody.xml\\").isFile()) { System.out.println("file there"); }
if(new File("E:\\OpenCV\\opencv\\data\\haarcascades\\haarcascade_mcs_upperbody.xml\\").isFile())
{ System.out.println("file there"); }
cascadeClassifier = new CascadeClassifier("E:\\OpenCV\\opencv\\data\\haarcascades\\haarcascade_mcs_upperbody.xml");
inputPic = Highgui.imread(picSrcDir + picName);
MatOfInt intw = new MatOfInt(1);
MatOfDouble dble = new MatOfDouble(1.05);
rect = new MatOfRect();
cascadeClassifier.detectMultiScale(inputPic, rect, intw, dble);
Scalar color = new Scalar(0, 0, 255);
System.out.println("Number Of Hits: " + rect.toArray().length);
Rect[] rectArr = rect.toArray();
System.out.println(rectArr.length);
int i=0;
for(Rect recta : rectArr){
System.out.println(rectArr[i]); i++;
Core.rectangle(inputPic, new Point(recta.x, recta.y), new Point(recta.x+recta.width, recta.y+recta.height), color);
}
Highgui.imwrite(picName, inputPic);
检测到人的上半身直立后:
public class TraceShape {
public TraceShape(){
// Load Plug-in
MarvinImagePlugin boundary = MarvinPluginLoader.loadImagePlugin("org.marvinproject.image.morphological.boundary");
// Load image
MarvinImage image = MarvinImageIO.loadImage("./res/person.jpg");
// Binarize
MarvinImage binImage = MarvinColorModelConverter.rgbToBinary(image, 245);
MarvinImageIO.saveImage(binImage, "./res/person_bin.png");
// Boundary
boundary.process(binImage.clone(), binImage);
MarvinImageIO.saveImage(binImage, "./res/person_boundary.png");
}
public static void main(String[] args) {
new TraceShape();
}
}
你需要研究边缘和特征检测,你已经找到了上半身的界限。谢谢,虽然我的规格已经改变,但我仍然可以使用二值化方法,所以干杯。嗨@Gabriel,我在保存
person\u boundary.png时得到一张空图像。在我意识到并更改boundary.process(binImage,binImage)之前,我遇到了像你一样的问题
toboundary.process(binImage.clone(),binImage)代码>