Работая над обнаружением и распознаванием лиц, и после успешного обнаружения лица я просто хочу обрезать лицо и сохранить его где-нибудь в драйвере, чтобы дать это для кода распознавания. У меня с трудом удается сохранить регион интереса как новый образ. У меня есть коды в Интернете, но он написан в предыдущей версии OpenCV, которая использует IplImage*
. Я использую OpenCV 2.4.2, который использует cv::Mat
.
Heeeelp !!!
Я отправлю свои коды (распознавание лиц и распознавание как таковые), если вы этого захотите.Обрезать и сохранить ROI как новое изображение в OpenCV 2.4.2 с помощью 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;
}
Спасибо. Мир
В папке учебника opencv есть один код об обнаружении лица. Подумайте об этом. Вам нужно будет использовать 'cv :: imwrite' для сохранения файла. – Acorbe
У вас есть код распознавания, обрезки и обнаружения? У меня такой же проект! –