我正在开发一个用于检测输入图像中的面部的项目。我在Java上使用opencv。 我面临的问题如下:
JLabel
setIcon
方法上。以下代码我试图添加和删除面
1)添加面孔:
jFaceLabel是JLabel数组,初始化为100 jpDetectedImage是一个JPanel,它包含JLabel(faces)
jFaceLabel = new JLabel[100];
for(int index=0;index<ImageHandler.noOfDetections;index++){
jFaceLabel[index] = new JLabel();
jFaceLabel[index].setIcon(new ImageIcon("C://Users//Public//Pictures//Sample Pictures//TestPics//temp//"+index+".jpg"));
//jFaceLabel[index].setIcon(face);
int x = this.jpDetectedImage.getX() + (index%2) * 64 + 10 * ((index%2)+1);
int y = this.jpDetectedImage.getY() + (index/2) * 64 + 10 * ((index/2)+1);
jFaceLabel[index].setBounds(x, y, 64, 64);
this.jpDetectedImage.add(jFaceLabel[index]);
if(index>8 && (index%2==0)){
this.jpDetectedImage.setPreferredSize(new Dimension(
this.jpDetectedImage.getPreferredSize().width,
this.jpDetectedImage.getPreferredSize().height + 74
));
}
System.out.println("Placed : "+tempPath+"//"+index+".jpg");
}
jpDetectedImage.repaint();
2)删除面孔:
for(int j=0;j<ImageHandler.noOfDetections;j++){
jFaceLabel[j].getParent().remove(jFaceLabel[j]);
}
this.jpDetectedImage.repaint();
问题是,第一次在JLabel上显示每个面部但连续检测到面部时,会导致旧面部重叠。 检测到的面部存储在物理路径中,并在加载检测图像时删除。
我要求的是,从jpDetectedImage面板中删除jFaceLabel数组,并为每个连续的检测阶段分配新的内存。
如何动态删除JPanel中的JLabel并使用新的ImageIcon再次添加它们?