Làm việc trên Nhận diện khuôn mặt và Nhận dạng, và sau khi phát hiện thành công khuôn mặt, tôi chỉ muốn cắt mặt và lưu nó ở đâu đó trong ổ đĩa nó cho mã nhận dạng. Tôi đang gặp khó khăn trong việc tiết kiệm Khu vực quan tâm dưới dạng hình ảnh mới. Tôi đã có một số mã trực tuyến nhưng nó được viết trong phiên bản trước của OpenCV sử dụng IplImage*
. Tôi đang sử dụng OpenCV 2.4.2 sử dụng cv::Mat
.
Heeeelp !!!
Tôi sẽ đăng các mã của tôi (Nhận diện khuôn mặt và Nhận dạng mỗi lần) nếu bạn muốn.cắt và Lưu ROI dưới dạng hình ảnh mới trong OpenCV 2.4.2 bằng cách sử dụng cv :: Mat
#include <cv.h>
#include <highgui.h>
#include <math.h>
// alphablend <imageA> <image B> <x> <y> <width> <height>
// <alpha> <beta>
IplImage* crop(IplImage* src, CvRect roi)
{
// Must have dimensions of output image
IplImage* cropped = cvCreateImage(cvSize(roi.width,roi.height), src->depth, src->nChannels);
// Say what the source region is
cvSetImageROI(src, roi);
// Do the copy
cvCopy(src, cropped);
cvResetImageROI(src);
cvNamedWindow("check", 1);
cvShowImage("check", cropped);
cvSaveImage ("style.jpg" , cropped);
return cropped;
}
int main(int argc, char** argv)
{
IplImage *src1, *src2;
CvRect myRect;
// IplImage* cropped ;
src1=cvLoadImage(argv[1],1);
src2=cvLoadImage(argv[2],1);
{
int x = atoi(argv[3]);
int y = atoi(argv[4]);
int width = atoi(argv[5]);
int height = atoi(argv[6]);
double alpha = (double)atof(argv[7]);
double beta = (double)atof(argv[8]);
cvSetImageROI(src1, cvRect(x,y,width,height));
cvSetImageROI(src2, cvRect(100,200,width,height));
myRect = cvRect(x,y,width,height) ;
cvAddWeighted(src1, alpha, src2, beta,0.0,src1);
cvResetImageROI(src1);
crop (src1 , myRect);
cvNamedWindow("Alpha_blend", 1);
cvShowImage("Alpha_blend", src1);
cvWaitKey(0);
}
return 0;
}
Cảm ơn. Hòa bình
Trong thư mục hướng dẫn opencv có một mã về phát hiện khuôn mặt. Hãy xem xét một. Bạn sẽ phải sử dụng 'cv :: imwrite' để lưu tập tin. – Acorbe
Bạn vẫn có mã nhận dạng, cắt xén và phát hiện? Tôi có cùng một dự án! –