Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/376.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/opencv/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java OPenCv-映射图像_Java_Opencv_Image Processing - Fatal编程技术网

Java OPenCv-映射图像

Java OPenCv-映射图像,java,opencv,image-processing,Java,Opencv,Image Processing,我试图从一张图像中裁剪出一张脸,我首先检测到这张脸,然后将该区域映射到另一张图像,但有些地方出了问题 以下是我的代码,如果您能提供帮助: import java.awt.image.BufferedImage; import java.awt.image.WritableRaster; import java.io.File; import java.io.IOException; import javax.imageio.ImageIO; import javax.swing.ImageIc

我试图从一张图像中裁剪出一张脸,我首先检测到这张脸,然后将该区域映射到另一张图像,但有些地方出了问题

以下是我的代码,如果您能提供帮助:

import java.awt.image.BufferedImage;
import java.awt.image.WritableRaster;
import java.io.File;
import java.io.IOException;

import javax.imageio.ImageIO;
import javax.swing.ImageIcon;
import javax.swing.JFrame;
import javax.swing.JLabel;

import org.opencv.core.Core;
import org.opencv.core.Mat;
import org.opencv.core.MatOfRect;
 import org.opencv.core.Point;
 import org.opencv.core.Rect;
import org.opencv.core.Scalar;
import org.opencv.highgui.Highgui;
import org.opencv.objdetect.CascadeClassifier;

 public class FaceDetector {

public static void main(String[] args) {

    BufferedImage img = getImage("C:\\Users\\Yousra\\Desktop\\test4.jpg");

    System.loadLibrary(Core.NATIVE_LIBRARY_NAME);
    System.out.println("\nRunning FaceDetector");

    CascadeClassifier faceDetector = new CascadeClassifier("D:\\CS\\opencv\\sources\\data\\haarcascades\\haarcascade_frontalface_alt.xml");
    CascadeClassifier eyeDetector = new CascadeClassifier("D:\\CS\\opencv\\sources\\data\\haarcascades\\haarcascade_eye.xml");
    Mat image = Highgui
            .imread("C:\\Users\\Yousra\\Desktop\\test4.jpg");

    MatOfRect faceDetections = new MatOfRect();
    faceDetector.detectMultiScale(image, faceDetections);

    if( faceDetections.toArray().length == 0){
        //  load("C:\\Users\\Yousra\\Desktop\\download.jpg") ){
      System.out.println("not found");

    }

    System.out.println(String.format("Detected %s faces", faceDetections.toArray().length));


    for (Rect rect : faceDetections.toArray()) {
        Core.rectangle(image, new Point(rect.x, rect.y), new Point(rect.x + rect.width, rect.y + rect.height),
                new Scalar(0, 255, 0));


    }
    WritableRaster cr = img.getRaster();
    WritableRaster wr = img.copyData(null);

    for(int b=0; b<94; b++){
          for(int a=0; a<94; a++){
              for(int h = faceDetections.toArray()[0].y; h< 60+ 94; h++){
                  for(int w = faceDetections.toArray()[0].x; w< 50+ 94; w++){

                      wr.setSample(b, a, 0, cr.getSample(w, h, 0));


                  }

              }
          }

    }

    BufferedImage img2= new BufferedImage(94, 94, BufferedImage.TYPE_INT_RGB);
    img2.setData(wr);

    JFrame frame = new JFrame("uiuxcu");
    frame.getContentPane().add(new JLabel(new ImageIcon(img2)));
    frame.pack();
    frame.setVisible(true);




    String filename = "ouput.png";
    System.out.println(String.format("Writing %s", filename));
    Highgui.imwrite(filename, image);
}
public static BufferedImage getImage(String imageName) {
    try {
        File input = new File(imageName);
        BufferedImage image = ImageIO.read(input);
        return image;
    } catch (IOException ie) {
        System.out.println("Error:" + ie.getMessage());
    }
    return null;
}}
导入java.awt.image.buffereImage;
导入java.awt.image.WritableRaster;
导入java.io.File;
导入java.io.IOException;
导入javax.imageio.imageio;
导入javax.swing.ImageIcon;
导入javax.swing.JFrame;
导入javax.swing.JLabel;
导入org.opencv.core.core;
导入org.opencv.core.Mat;
导入org.opencv.core.MatOfRect;
导入org.opencv.core.Point;
导入org.opencv.core.Rect;
导入org.opencv.core.Scalar;
导入org.opencv.highgui.highgui;
导入org.opencv.objdetect.CascadeClassifier;
公共类人脸检测器{
公共静态void main(字符串[]args){
BuffereImage img=getImage(“C:\\Users\\Yousra\\Desktop\\test4.jpg”);
System.loadLibrary(Core.NATIVE\u LIBRARY\u NAME);
System.out.println(“\n运行面检测器”);
CascadeClassifier faceDetector=新的级联分类器(“D:\\CS\\opencv\\sources\\data\\haarcascade\\haarcascade\u frontalface\u alt.xml”);
CascadeClassifier eyeDetector=新的级联分类器(“D:\\CS\\opencv\\sources\\data\\haarcascade\\haarcascade\u eye.xml”);
Mat image=Highgui
.imread(“C:\\Users\\Yousra\\Desktop\\test4.jpg”);
MatOfRect faceDetections=新的MatOfRect();
面部检测器。检测多尺度(图像、面部检测);
if(faceDetections.toArray().length==0){
//加载(“C:\\Users\\Yousra\\Desktop\\download.jpg”)){
System.out.println(“未找到”);
}
System.out.println(String.format(“检测到%s个面”,faceDetections.toArray().length));
for(Rect-Rect:faceDetections.toArray()){
核心矩形(图像,新点(矩形x,矩形y),新点(矩形x+矩形宽度,矩形y+矩形高度),
新标量(0,255,0));
}
WritableRaster cr=img.getRaster();
WritableRaster wr=img.copyData(空);

对于(intb=0;b为什么不简单地使用submat

Mat face_cropped = image.submat( faceDetections.toArray()[0] );