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 需要在同一帧上显示从帧抓取器抓取的图像_Java_Opencv_Face Detection_Javacv_Face Recognition - Fatal编程技术网

Java 需要在同一帧上显示从帧抓取器抓取的图像

Java 需要在同一帧上显示从帧抓取器抓取的图像,java,opencv,face-detection,javacv,face-recognition,Java,Opencv,Face Detection,Javacv,Face Recognition,我可以流式传输视频并使用帧抓取器捕获检测到的人脸,现在我想显示从帧抓取器类抓取的图像,并且需要显示在同一帧上,即视频流的一侧 \使用frame grabber类从视频中捕获帧的代码。 包装com.ravi.videotoimages import static com.googlecode.javacv.cpp.opencv_core.CV_AA; import static com.googlecode.javacv.cpp.opencv_core.IPL_DEPTH_8U; import s

我可以流式传输视频并使用帧抓取器捕获检测到的人脸,现在我想显示从帧抓取器类抓取的图像,并且需要显示在同一帧上,即视频流的一侧

\使用frame grabber类从视频中捕获帧的代码。 包装com.ravi.videotoimages

import static com.googlecode.javacv.cpp.opencv_core.CV_AA;
import static com.googlecode.javacv.cpp.opencv_core.IPL_DEPTH_8U;
import static com.googlecode.javacv.cpp.opencv_core.cvClearMemStorage;
import static com.googlecode.javacv.cpp.opencv_core.cvCreateImage;
import static com.googlecode.javacv.cpp.opencv_core.cvGetSeqElem;
import static com.googlecode.javacv.cpp.opencv_core.cvGetSize;
import static com.googlecode.javacv.cpp.opencv_core.cvLoad;
import static com.googlecode.javacv.cpp.opencv_core.cvPoint;
import static com.googlecode.javacv.cpp.opencv_core.cvRectangle;
import static com.googlecode.javacv.cpp.opencv_core.cvSetImageROI;
import static com.googlecode.javacv.cpp.opencv_highgui.cvLoadImage;
import static com.googlecode.javacv.cpp.opencv_highgui.cvSaveImage;
import static com.googlecode.javacv.cpp.opencv_highgui.cvShowImage;
import static com.googlecode.javacv.cpp.opencv_highgui.cvWaitKey;
import static com.googlecode.javacv.cpp.opencv_imgproc.CV_BGR2GRAY;
import static com.googlecode.javacv.cpp.opencv_imgproc.cvCvtColor;
import static com.googlecode.javacv.cpp.opencv_objdetect.CV_HAAR_DO_CANNY_PRUNING;
import static com.googlecode.javacv.cpp.opencv_objdetect.cvHaarDetectObjects;

import com.googlecode.javacpp.Loader;
import com.googlecode.javacv.FrameGrabber;
import com.googlecode.javacv.FrameGrabber.Exception;
import com.googlecode.javacv.OpenCVFrameGrabber;
import com.googlecode.javacv.cpp.opencv_core.CvMemStorage;
import com.googlecode.javacv.cpp.opencv_core.CvRect;
import com.googlecode.javacv.cpp.opencv_core.CvScalar;
import com.googlecode.javacv.cpp.opencv_core.CvSeq;
import com.googlecode.javacv.cpp.opencv_core.IplImage;
import com.googlecode.javacv.cpp.opencv_objdetect;
import com.googlecode.javacv.cpp.opencv_objdetect.CvHaarClassifierCascade;
//import static com.googlecode.javacv.cpp.opencv_highgui.cvNamedWindow;
//import com.googlecode.javacv.CanvasFrame;
//import com.googlecode.javacv.VideoInputFrameGrabber;

public class faceRecongitionwitdetection {

    public static final String XML_FILE = "D:\\l\\OpenCV\\haarcascade_frontalface_default.xml";
    private static final int SCALE = 1;

    @SuppressWarnings("unused")
    private static boolean isRunning = true;

    @SuppressWarnings("unused")
    public static void main(String[] args) throws Exception {

        // CanvasFrame canvas = new CanvasFrame("Camera");
        // canvas.setDefaultCloseOperation(CanvasFrame.EXIT_ON_CLOSE);
        // canvas.addWindowListener(new SetBoolean());

        IplImage image;

        FrameGrabber grabber = new OpenCVFrameGrabber("D:\\l\\OpenCV\\jobs.mp4");

        if (grabber == null) {
            System.out.println("!!! Failed OpenCVFrameGrabber");
            return;
        }

        try {
            grabber.start();
            IplImage frame = null;
            int i = 1;
            int frame_counter = 1;
            while (true) {
                frame = grabber.grab();
                if (frame == null) {
                    System.out.println("!!! Failed grab");
                    break;
                }
                IplImage grayImg = cvCreateImage(cvGetSize(frame),
                        IPL_DEPTH_8U, 1);
                cvCvtColor(frame, grayImg, CV_BGR2GRAY);
                if ((frame_counter % 500) == 0) {

                    // cvSaveImage(i + "teja.jpg", grayImg);

                    detect(grayImg);

                    cvShowImage("Result", grayImg);

                    cvSaveImage(i + "teja.jpg", grayImg);
                    String xyz = i + "teja.jpg";
                    detector(xyz);

                }

                int key = cvWaitKey(1);
                if (key == 100) {
                    break;
                }

                frame_counter++;
                i++;
            }

        } catch (Exception e) {
            System.out.println("!!! Exception");
        }
    }

    public static void detect(IplImage src) {
        // IplImage grayImg = cvCreateImage(cvGetSize(src), IPL_DEPTH_8U, 1);
        // cvCvtColor(src, grayImg, CV_BGR2GRAY);

        CvHaarClassifierCascade cascade = new CvHaarClassifierCascade(
                cvLoad(XML_FILE));
        CvMemStorage storage = CvMemStorage.create();
        CvSeq sign = cvHaarDetectObjects(src, cascade, storage, 3, 2,
                CV_HAAR_DO_CANNY_PRUNING);

        cvClearMemStorage(storage);

        int total_Faces = sign.total();

        for (int i = 0; i < total_Faces; i++) {
            CvRect r = new CvRect(cvGetSeqElem(sign, i));
            cvRectangle(src, cvPoint(r.x(), r.y()),
                    cvPoint(r.width() + r.x(), r.height() + r.y()),
                    CvScalar.GREEN, 3, CV_AA, 0);
        }
    }

    public static void detector(String grab) {
        if (grab.length() < 0) {
            System.out.println("No Input File");
            return;
        }

        System.out.println("Starting OpenCV...");

        // preload the opencv_objdetect module to work around a known bug
        Loader.load(opencv_objdetect.class);

        // load an image
        System.out.println("Loading image from " + grab);
        IplImage origImg = cvLoadImage(grab);

        IplImage grayImg = cvCreateImage(cvGetSize(origImg), IPL_DEPTH_8U, 1);
        cvCvtColor(origImg, grayImg, CV_BGR2GRAY);
        CvMemStorage storage = CvMemStorage.create();
        CvHaarClassifierCascade cascade = new CvHaarClassifierCascade(
                cvLoad(XML_FILE));
        System.out.println("Detecting faces...");
        CvSeq faces = cvHaarDetectObjects(grayImg, cascade, storage, 3, 2,
                CV_HAAR_DO_CANNY_PRUNING);
        cvClearMemStorage(storage);

        // iterate over the faces and draw yellow rectangles around them
        int total = faces.total();
        System.out.println("Found " + total + " face(s)");
        for (int i = 0; i < total; i++) {
            CvRect r = new CvRect(cvGetSeqElem(faces, i));

            cvSetImageROI(grayImg, r);
            cvRectangle(grayImg, cvPoint(r.x() * SCALE, r.y() * SCALE), // undo
                                                                        // the
                                                                        // scaling
                    cvPoint((r.x() + r.width()) * SCALE, (r.y() + r.height())

                    * SCALE), CvScalar.BLUE, 6, CV_AA, 0);

            if (total > 0) {
                // int j=1;
                System.out.println("Saving marked-faces version of " + grab
                        + " in " + grab);
                cvSaveImage(grab, grayImg);

            }
        }
    }
}
import static com.googlecode.javacv.cpp.opencv_core.CV_AA;
导入静态com.googlecode.javacv.cpp.opencv_core.IPL_DEPTH_8U;
导入静态com.googlecode.javacv.cpp.opencv_core.cvClearMemStorage;
导入静态com.googlecode.javacv.cpp.opencv_core.cvCreateImage;
导入静态com.googlecode.javacv.cpp.opencv_core.cvgetsequelem;
导入静态com.googlecode.javacv.cpp.opencv_core.cvGetSize;
导入静态com.googlecode.javacv.cpp.opencv_core.cvLoad;
导入静态com.googlecode.javacv.cpp.opencv_core.cvPoint;
导入静态com.googlecode.javacv.cpp.opencv_core.cvRectangle;
导入静态com.googlecode.javacv.cpp.opencv_core.cvSetImageROI;
导入静态com.googlecode.javacv.cpp.opencv_highgui.cvLoadImage;
导入静态com.googlecode.javacv.cpp.opencv_highgui.cvSaveImage;
导入静态com.googlecode.javacv.cpp.opencv_highgui.cvShowImage;
导入静态com.googlecode.javacv.cpp.opencv_highgui.cvWaitKey;
导入静态com.googlecode.javacv.cpp.opencv_imgproc.CV_bgr2;
导入静态com.googlecode.javacv.cpp.opencv_imgproc.cvtcolor;
导入静态com.googlecode.javacv.cpp.opencv\u objdetect.CV\u HAAR\u DO\u CANNY\u修剪;
导入静态com.googlecode.javacv.cpp.opencv_objdetect.cvhaardeticobjects;
导入com.googlecode.javacpp.Loader;
导入com.googlecode.javacv.FrameGrabber;
导入com.googlecode.javacv.FrameGrabber.Exception;
导入com.googlecode.javacv.OpenCVFrameGrabber;
导入com.googlecode.javacv.cpp.opencv_core.CvMemStorage;
导入com.googlecode.javacv.cpp.opencv_core.CvRect;
导入com.googlecode.javacv.cpp.opencv_core.CvScalar;
导入com.googlecode.javacv.cpp.opencv_core.CvSeq;
导入com.googlecode.javacv.cpp.opencv_core.IplImage;
导入com.googlecode.javacv.cpp.opencv_objdetect;
导入com.googlecode.javacv.cpp.opencv_objdetect.CvHaarClassifierCascade;
//导入静态com.googlecode.javacv.cpp.opencv_highgui.cvNamedWindow;
//导入com.googlecode.javacv.CanvasFrame;
//导入com.googlecode.javacv.VideoInputFrameGrabber;
公共类faceRecongitionwitdetection{
公共静态最终字符串XML\u FILE=“D:\\l\\OpenCV\\haarcascade\u frontalface\u default.XML”;
专用静态最终整数刻度=1;
@抑制警告(“未使用”)
私有静态布尔值isRunning=true;
@抑制警告(“未使用”)
公共静态void main(字符串[]args)引发异常{
//画布框画布=新画布框(“相机”);
//canvas.setDefaultCloseOperation(CanvasFrame.EXIT_ON_CLOSE);
//addWindowListener(新的SetBoolean());
图像;
FrameGrabber grabber=新的OpenCVFrameGrabber(“D:\\l\\OpenCV\\jobs.mp4”);
如果(抓取器==null){
System.out.println(!!!失败的OpenCVFrameGrabber);
返回;
}
试一试{
grabber.start();
IplImage frame=null;
int i=1;
int frame_计数器=1;
while(true){
frame=grabber.grab();
if(frame==null){
System.out.println(“!!!抓取失败”);
打破
}
IplImage grayImg=cvCreateImage(cvGetSize(帧),
IPL_深度_8U,1);
CVT颜色(边框、灰色、CV_bgr2灰色);
如果((帧计数器%500)==0){
//cvSaveImage(i+“teja.jpg”,灰度);
检测(灰度);
cvShowImage(“结果”,灰度);
cvSaveImage(i+“teja.jpg”,灰度);
字符串xyz=i+“teja.jpg”;
探测器(xyz);
}
int key=cvWaitKey(1);
如果(键==100){
打破
}
帧计数器++;
i++;
}
}捕获(例外e){
System.out.println(!!!异常);
}
}
公共静态空隙检测(IplImage src){
//IplImage grayImg=cvCreateImage(cvGetSize(src),IPL_DEPTH_8U,1);
//CVT颜色(src、灰色、CV_bgr2灰色);
CvHaarClassifierCascade级联=新CvHaarClassifierCascade(
cvLoad(XML_文件);
CvMemStorage=CvMemStorage.create();
CvSeq sign=CVHAARDECTOBJECTS(src、级联、存储、3、2、,
CV_HAAR_DO_CANNY_修剪);
cvClearMemStorage(存储);
int total_Faces=sign.total();
对于(int i=0;i