opencvの顔検出とROIの部分保存の2つのサンプルを糊でくっつけたようなものなので、あまり参考になりません。(^^;)ゞ
とりあえず、評価環境です。
・Ubuntu 12.04
・OpenCV 2.3.1 (apt-getでインストールしました)
・PC: sotec C101
・Camera: Qcam E3500
ROIを保存するファイル名が手抜きになっています。。。
int
main(int argc, char *argv[])
{
const char *imagename = argc > 1 ? argv[1] : "../../image/lenna.png";
cv::Mat img;
//Capture routine
cv::VideoCapture cap(0);
cap.set(CV_CAP_PROP_FRAME_WIDTH, 640);
cap.set(CV_CAP_PROP_FRAME_HEIGHT, 480);
if(!cap.isOpened()) return -1;
// cv::namedWindow("Capture", CV_WINDOW_AUTOSIZE|CV_WINDOW_FREERATIO);
cv::namedWindow("result", CV_WINDOW_AUTOSIZE|CV_WINDOW_FREERATIO);
double scale = 4.0;
while(1) {
cap >> img;
// cv::imshow("Capture", img); //output capture image
cv::Mat gray, smallImg(cv::saturate_cast<int>(img.rows/scale), cv::saturate_cast<int>(img.cols/scale), CV_8UC1);
// translation grayscale
cv::cvtColor(img, gray, CV_BGR2GRAY);
// Reduce the image in order to reduce processing time
cv::resize(gray, smallImg, smallImg.size(), 0, 0, cv::INTER_LINEAR);
cv::equalizeHist( smallImg, smallImg);
// Reading of the classifier
std::string cascadeName = "./haarcascade_frontalface_alt.xml"; // v2 Haar-like
// std::string cascadeName = "./haarcascade_frontalface_default.xml"; // v1 Haar-like
//std::string cascadeName = "./lbpcascade_frontalface.xml"; // LBP
cv::CascadeClassifier cascade;
if(!cascade.load(cascadeName))
return -1;
std::vector<cv::Rect> faces;
cascade.detectMultiScale(smallImg, faces,
1.1, 2,
CV_HAAR_SCALE_IMAGE,
cv::Size(10, 10));
// Rendering the result
std::vector<cv::Rect>::const_iterator r = faces.begin();
for(; r != faces.end(); ++r) {
struct timeval tv;
char clipout[200];
cv::Point pt1, pt2; //draw rectangle
int radius; //draw circle
pt1.x = cv::saturate_cast<int>(r->x*3); //draw rectangle
pt1.y = cv::saturate_cast<int>(r->y*3); //draw rectangle
pt2.x = cv::saturate_cast<int>((r->x + r->width)*5); //draw rectangle
pt2.y = cv::saturate_cast<int>((r->y + r->height)*5); //draw rectangle
cv::rectangle( img, pt1, pt2, cv::Scalar(80,80,255), 3, 8, 0 ); //draw rectangle
gettimeofday(&tv, NULL);
sprintf(clipout,"./result/%d.%d.jpg",tv.tv_sec,tv.tv_usec);
cv::Mat roi_img(img, cv::Rect(pt1.x, pt1.y, r->width*7, r->height*7));
cv::imwrite(clipout,roi_img);
}
cv::imshow( "result", img );
cv::waitKey(66);
}
}
0 件のコメント:
コメントを投稿
注: コメントを投稿できるのは、このブログのメンバーだけです。