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] );