Closed GoogleCodeExporter closed 8 years ago
Hi,
I am working on something very similar for a school project, which is due way too soon for my comfort. We might be able to help each other, I hope, since there is not really enough examples of JavaCV use on the web. About your specific question, there is indeed a function cvSaveImage. Just call:
cvSaveImage(FileName, Image);
where FileName is a string
and Image is an IplImage.
I'm not sure that it will recognize your filename string. here is what one of
mine looks like:
String capFileName = "data/capture" + capCounter + ".jpg";
cvSaveImage(capFileName, grayImage);
I am storing a series of captures here in the data directory of my NetBeans
project. I'm not sure about the D:\\ in your filename, I don't think you can
use backslashes. I would try to just do:
cvSaveImage("img1.bmp",grabbedImage) and see if it saves it in your current
directory.
If it still won't work, you are probably missing an import. I had the same
problem so I copied the imports from the example on the JavaCV home page:
import static com.googlecode.javacv.cpp.opencv_core.*;
import static com.googlecode.javacv.cpp.opencv_imgproc.*;
import static com.googlecode.javacv.cpp.opencv_highgui.*;
I think it requires the highgui.* one, which I see you don't have in your
listing. I haven't quite figured out how to find out which imports I need by
looking at the JavaCV source, so I basically use them all.
Let me know if you are interested in communicating about our projects.
grcunning at gmail dot com
Thanks
Gary Cunningham
Penn State University
Original comment by grcunn...@gmail.com
on 15 Mar 2011 at 6:07
Hi Gary ..thanks for your reply ....yes I was missing imports only..but I still
not able to get the only face image.Current image also includes my
background(like wall , my neck etc)..To recognize face as per my logic i need
only face image to store.
Yes I will be happy to communicate and work as a team on this with you.
I am working on a project with Face and Fingerprint recognition.
My email id is gauravsagargupta@gmail.com
Original comment by gauravsa...@gmail.com
on 15 Mar 2011 at 11:31
Hi Gary
Thanks for your reply mail
Yes I was missing some imports only while saving.
"D:\\imagename.jpg" works fine.
But I am still not able to extract and save exact face image only. Now I can
save complete image captured by webcam but that face part inside the Rectangle
is what I wanted to save and process.
Following is my code in blue for face image save for which i get
Runtime Error with my jdk1.6.0_24\bin\java.exe "This application has requested
the Runtime to terminate it in an unusual way.Please contact the application's
support team for more information."
while (frame.isVisible() && (grabbedImage = grabber.grab()) != null &&
counter==0)
{
cvCvtColor(grabbedImage, grayImage, CV_BGR2GRAY);
CvSeq faces = cvHaarDetectObjects(grayImage, classifier, storage,
1.1, 3, CV_HAAR_DO_CANNY_PRUNING);
int total = faces.total();
for (int i = 0; i < total; i++)
{
CvRect r = new CvRect(cvGetSeqElem(faces, i));
int x = r.x(), y = r.y(), w = r.width(), h = r.height();
CvSize facesize= new CvSize(w*h);
IplImage onlyface= cvCreateImageHeader(facesize, IPL_DEPTH_8U, grabbedImage.nChannels());
cvGetRectSubPix(grabbedImage, onlyface, new CvPoint2D32f((r.x()+(facesize.width()/2)),(r.y()+(facesize.height()/2))));
cvSaveImage("D:\\face.jpg", onlyface);
cvRectangle(grabbedImage, cvPoint(x, y), cvPoint(x+w, y+h), CvScalar.RED, 1, CV_AA, 0);
cvRectangle(grabbedImage, cvPoint(x, y), cvPoint(x+w, y+h), CvScalar.BLUE, 1, CV_AA, 0);
// To access the elements of a native array, use the `position()` method
hatPoints.position(0).x(x-w/10); hatPoints.y(y-h/10);
hatPoints.position(1).x(x+w*11/10); hatPoints.y(y-h/10);
hatPoints.position(2).x(x+w/2); hatPoints.y(y-h/2);
cvFillConvexPoly(grabbedImage, hatPoints.position(0), 3, CvScalar.GREEN, CV_AA, 0);
}
cvSaveImage("D:\\PhotoGallery.jpg", grabbedImage);
cvThreshold(grayImage, grayImage, 64, 255, CV_THRESH_BINARY);
frame.showImage(grabbedImage);
Awaiting your response
Original comment by gauravsa...@gmail.com
on 16 Mar 2011 at 12:29
CvSize facesize= new CvSize(w*h); -> this allocates an array of uninitialized
CvSize and that's probably not what you want to do..
Original comment by samuel.a...@gmail.com
on 20 Mar 2011 at 5:51
hi Guys!!
I have the same issue for saving the images of the framegrabber in to an image
type .
since cvsaveimage()is not returning an image i used cvretrieve().using
cvCapture object.
here is my code:
public static BufferedImage faceDetectionInVideo() throws IOException {
System.out.println("inside of CVCapture");
IplImage image1;
BufferedImage bufferedImage = null;
CvCapture capture = cvCreateFileCapture("D:\\l\\OpenCV\\obama.mp4");
int i = 1;
int frame_counter = 1;
while (true) {
image1 = cvQueryFrame(capture);
if (image1 == null)
break;
IplImage grayImg = cvCreateImage(cvGetSize(image1), IPL_DEPTH_8U, 1);
cvCvtColor(image1, grayImg, CV_BGR2GRAY);
if ((frame_counter % 500) == 0) {
cvShowImage("Result", grayImg);
image1 = cvRetrieveFrame(capture);// iplImage type
bufferedImage = image1.getBufferedImage();
// cvSaveImage(i + "D://sample images//teja.jpg", grayImg);
}
int key = cvWaitKey(1);
if (key == 10) {
break;
}
frame_counter++;
i++;
}
return bufferedImage;
}
my proble is that it is returning me the last frame of the video .
do help me in getting all the frames of the video .
Original comment by alluri.r...@gmail.com
on 25 Sep 2013 at 7:33
Original issue reported on code.google.com by
gauravsa...@gmail.com
on 15 Mar 2011 at 5:12