我在图像中有两个点,左眼中心(X,Y)和右眼中心(X,Y)。我使用cv::circle
围绕双眼画圈,这很好。但我现在要做的就是获得我画过的圆圈的投资回报率,即提取眼睛并将它们保存在新的垫子中。
这是我目前的结果:
...但正如我上面所说,只需要将眼睛周围的圆圈提取到一个新的垫子中,每只眼睛一个。
这是我的代码:
cv::Mat plotImage;
plotImage = cv::imread("C:/temp/face.jpg", cv::IMREAD_COLOR);
cv::Point leftEye(person.GetLeftEyePoint().X, person.GetLeftEyePoint().Y);
cv::Point rightEye(person.GetRightEyePoint().X, person.GetRightEyePoint().Y);
cv::circle(plotImage, leftEye, 15, cv::Scalar(255, 255));
cv::circle(plotImage, rightEye, 15, cv::Scalar(255, 255));
cv::imwrite("C:\\temp\\plotImg.jpg", plotImage);
我找到了以下链接,但我似乎无法理解它们/将它们应用于我正在尝试的内容: http://answers.opencv.org/question/18784/crop-image-using-hough-circle/
Define image ROI with OpenCV in C
感谢任何帮助/指导!谢谢!
答案 0 :(得分:8)
// (badly handpicked coords):
Point cen(157,215);
int radius = 15;
//get the Rect containing the circle:
Rect r(cen.x-radius, cen.y-radius, radius*2,radius*2);
// obtain the image ROI:
Mat roi(plotImage, r);
// make a black mask, same size:
Mat mask(roi.size(), roi.type(), Scalar::all(0));
// with a white, filled circle in it:
circle(mask, Point(radius,radius), radius, Scalar::all(255), -1);
// combine roi & mask:
Mat eye_cropped = roi & mask;