Opencv 如何在IplImage上编写文本?

Opencv 如何在IplImage上编写文本?,opencv,javacv,Opencv,Javacv,我正在探索一个用javacv开发的人脸检测程序,它工作得非常好。它捕获视频,以20fps的速度传递给FaceDetection类来检测人脸。然后将处理后的图像发送回实时提要。如果检测到一个面,将在该面周围绘制一个矩形。我需要在人脸检测图像中添加一些文本以及矩形。我试着使用cvPutText方法。但是它显示了一个错误,“cvPutText对于类型FaceDetection是未定义的” FaceDetection.java的代码: import static com.googlecode.javac

我正在探索一个用javacv开发的人脸检测程序,它工作得非常好。它捕获视频,以20fps的速度传递给FaceDetection类来检测人脸。然后将处理后的图像发送回实时提要。如果检测到一个面,将在该面周围绘制一个矩形。我需要在人脸检测图像中添加一些文本以及矩形。我试着使用cvPutText方法。但是它显示了一个错误,“cvPutText对于类型FaceDetection是未定义的”

FaceDetection.java的代码:

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.cvGetSeqElem;
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_imgproc.CV_BGR2GRAY;
import static com.googlecode.javacv.cpp.opencv_imgproc.CV_INTER_LINEAR;
import static com.googlecode.javacv.cpp.opencv_imgproc.cvCvtColor;
import static com.googlecode.javacv.cpp.opencv_imgproc.cvEqualizeHist;
import static com.googlecode.javacv.cpp.opencv_imgproc.cvResize;
import static com.googlecode.javacv.cpp.opencv_objdetect.CV_HAAR_DO_CANNY_PRUNING;
import static com.googlecode.javacv.cpp.opencv_objdetect.cvHaarDetectObjects;
import static com.googlecode.javacv.cpp.opencv_objdetect.cvReleaseHaarClassifierCascade;
import java.io.FileWriter;
import java.io.IOException;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import com.googlecode.javacv.cpp.opencv_core.CvFont;
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.Cv_iplCreateImageHeader;
import com.googlecode.javacv.cpp.opencv_core.IplImage;
import com.googlecode.javacv.cpp.opencv_imgproc.CvDistanceFunction;
import com.googlecode.javacv.cpp.opencv_objdetect.CvHaarClassifierCascade;

@SuppressWarnings("unused")
public class FaceDetection 
{
     private static final int SCALE = 2;
                            public int j=0,k=0,no,total;
                            public String timeStamp;
                            public int w=0,h=0,distance=0;
                            public String viewers,dist;
                            FileWriter out;

     public IplImage FaceDetections(IplImage origImg,int no) throws IOException 
     {          
                out = new FileWriter("D:/log.csv",true);               
                String timeStamp = new SimpleDateFormat("ddMMyyyy_HHmmss").format(Calendar.getInstance().getTime());
                if(no==1)
                {
                   out.append("\n From "+timeStamp+"\n");
                   out.append("Serial No,Face Coordinates,Face No,TimeStamp,Distance,count\n");
                }
                    String CASCADE_FILE ="C:/opencv/data/haarcascades/haarcascade_frontalface_alt2.xml"; 
                            try
                            {                              
                                            IplImage grayImg = IplImage.create(origImg.width(),origImg.height(), IPL_DEPTH_8U, 1);
                                            cvCvtColor(origImg, grayImg, CV_BGR2GRAY);
                                            IplImage smallImg = IplImage.create(grayImg.width()/SCALE,grayImg.height()/SCALE, IPL_DEPTH_8U, 1); 
                                            cvResize(grayImg, smallImg, CV_INTER_LINEAR);                                             
                                            IplImage equImg = IplImage.create(smallImg.width(),smallImg.height(), IPL_DEPTH_8U, 1);
                                            cvEqualizeHist(smallImg, equImg);                                           
                                            CvMemStorage storage = CvMemStorage.create();
                                            CvHaarClassifierCascade cascade =new CvHaarClassifierCascade(cvLoad(CASCADE_FILE));                                                 
                                            CvSeq faces = cvHaarDetectObjects(equImg, cascade, storage,1.1, 3, CV_HAAR_DO_CANNY_PRUNING);                                        
                                            cvClearMemStorage(storage);    
                                            cvReleaseHaarClassifierCascade(cascade);
                                            total = faces.total();                                                            
                                            for (int i = 1; i <= total; i++) 
                                            {
                                                            CvRect r = new CvRect(cvGetSeqElem(faces, i));                       
                                                            cvRectangle(origImg, cvPoint( r.x()*SCALE, r.y()*SCALE ),cvPoint( (r.x() + r.width())*SCALE,(r.y() + r.height())*SCALE ),CvScalar.BLUE, 2, CV_AA, 0);         
                                                            String strRect = String.format("%d-%d-%d-%d ", r.x(), r.y(), r.width(), r.height());                                                                                                                                                                             
                                                            out.append(no+","+strRect+","+i+" ,"+timeStamp+","+distance+","+total+"\n");
                                                            System.out.println(" "+strRect); 

                                                            CvFont font;
                                                            cvInitFont(font, CV_FONT_HERSHEY_SIMPLEX, 0.5, 0.5);
                                                            cvPutText(origImg,"male",cvPoint(100,200),&font,CvScalar.BLUE);                                                    
                                            }
                                            out.flush();
                                            out.close();
                                            CvSeq.deallocateReferences();
                            }

                catch(Exception e)
                {
                            System.out.println("Exception FD"+e);

                }
                            IplImage equImg = null;
                            IplImage smallImg=null;
                            IplImage grayImg =null;
                            return origImg; 
            }
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.cvgetsequelem;
导入静态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_imgproc.CV_bgr2;
导入静态com.googlecode.javacv.cpp.opencv_imgproc.CV_INTER_LINEAR;
导入静态com.googlecode.javacv.cpp.opencv_imgproc.cvtcolor;
导入静态com.googlecode.javacv.cpp.opencv_imgproc.cvhist;
导入静态com.googlecode.javacv.cpp.opencv_imgproc.cvResize;
导入静态com.googlecode.javacv.cpp.opencv\u objdetect.CV\u HAAR\u DO\u CANNY\u修剪;
导入静态com.googlecode.javacv.cpp.opencv_objdetect.cvhaardeticobjects;
导入静态com.googlecode.javacv.cpp.opencv_objdetect.cvReleaseHaarClassifierCascade;
导入java.io.FileWriter;
导入java.io.IOException;
导入java.text.simpleDataFormat;
导入java.util.Calendar;
导入com.googlecode.javacv.cpp.opencv_core.CvFont;
导入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.Cv_iplCreateImageHeader;
导入com.googlecode.javacv.cpp.opencv_core.IplImage;
导入com.googlecode.javacv.cpp.opencv_imgproc.cvdistance函数;
导入com.googlecode.javacv.cpp.opencv_objdetect.CvHaarClassifierCascade;
@抑制警告(“未使用”)
公共类人脸检测
{
专用静态最终整数刻度=2;
公共整数j=0,k=0,否,总计;
公共字符串时间戳;
公共int w=0,h=0,距离=0;
公共字符串查看器,dist;
文件编写器输出;
公共IplImage FaceDetections(IplImage origImg,int no)引发IOException
{          
out=新的FileWriter(“D:/log.csv”,true);
字符串时间戳=新的SimpleDataFormat(“ddMMyyyy_HHmmss”).format(Calendar.getInstance().getTime());
如果(否==1)
{
out.append(“\n From”+时间戳+”\n”);
追加(“序列号、面坐标、面号、时间戳、距离、计数\n”);
}
字符串CASCADE_FILE=“C:/opencv/data/haarcascade/haarcascade_frontalface_alt2.xml”;
尝试
{                              
IplImage grayImg=IplImage.create(origImg.width(),origImg.height(),IPL_DEPTH_8U,1);
CVT颜色(原色、灰色、CV_bgr2灰色);
IplImage smallImg=IplImage.create(grayImg.width()/SCALE,grayImg.height()/SCALE,IPL_DEPTH_8U,1);
cvResize(灰度、小灰度、CV_内部线性);
IplImage equImg=IplImage.create(smallImg.width(),smallImg.height(),IPL_DEPTH_8U,1);
CvHist(smallImg,equImg);
CvMemStorage=CvMemStorage.create();
CvHaarClassifierCascade cascade=新的CvHaarClassifierCascade(cvLoad(cascade_文件));
CvSeq faces=cvhaardeticobjects(相等、级联、存储、1.1、3、CV_HAAR_DO_CANNY_修剪);
cvClearMemStorage(存储);
cvReleaseHaarClassifierCascade(级联);
total=faces.total();
对于(inti=1;i)

有趣的是,对
cvPutText()
的调用没有问题,因此问题一定在代码的其他部分。请确保您正在导入:

import static com.googlecode.javacv.cpp.opencv_core.cvPutText;

搜索“类型未定义”的更多信息。谢谢..它可以工作..但是“CV\u FONT\u HERSHEY\u SIMPLEX”仍然无法解决它显示的变量错误。我已经包含了“import com.googlecode.javacv.cpp.opencv\u core.CvFont”;但它说cvInitFont未定义类型面检测”。:(不要单独添加方法和常量,只需添加整个shebang,比如:
import static com.googlecode.javacv.cpp.opencv_core.*;
看看需要导入什么。无需感谢!请投票给我的答案;)回头见。