java - 如何使用 Java 在 CascadeCalssifier 中设置裁剪大小
问题描述
public BufferedImage detectAndDisplay(BufferedImage img, CascadeClassifier faceCascade) {
Mat frameGray = new Mat();
BufferedImage imgout = null;
Mat image = ImagePreProcessing.bufferedImageToMat(img);
// -- Detect faces
MatOfRect faces = new MatOfRect();
faceCascade.detectMultiScale(image, faces);
List<Rect> listOfFaces = faces.toList();
for (Rect face : listOfFaces) {
Point center = new Point(face.x + face.width / 2, face.y + face.height / 2);
Imgproc.ellipse(image, center, new Size(face.width / 2, face.height / 2), 0, 0, 360,
new Scalar(255, 0, 255), 3);
Mat faceROI = image.submat(face);
imgout = ImagePreProcessing.Mat2BufferedImage(faceROI);
System.out.println("OpenCV: " +center);
}
return imgout;
}
我有那个代码..但我不知道设置裁剪输出图像的代码在哪里。我想要带有圆形模板的原始版本的图片..不是裁剪可以给我建议,请:)
输入:
输出:
解决方案
在您的代码中,您返回了原始图像的裁剪图像,因此如果您想要原始图像,请绘制圆圈并将其转换为 BufferedImage 并返回。
for (Rect face : listOfFaces) {
Point center = new Point(face.x + face.width / 2, face.y + face.height / 2);
Imgproc.ellipse(image, center, new Size(face.width / 2, face.height / 2), 0, 0, 360,
new Scalar(255, 0, 255), 3);
// dot not crop!!!
/*Mat faceROI = image.submat(face);
imgout = ImagePreProcessing.Mat2BufferedImage(faceROI);*/
System.out.println("OpenCV: " +center);
imgout = ImagePreProcessing.Mat2BufferedImage(image);
}
推荐阅读
- .net - 错误:asp.net MVC-5 模型项到 IEnumerable
- logging - 使用 ESAPI 记录器生成的日志
- javascript - API 使用令牌对 odoo 进行身份验证
- javascript - 未捕获的类型错误:无法读取未定义的属性“设置”
- c# - 将 Long 十六进制字符串转换为十进制值
- java - 我在某些条件下使用 IF 语句 if(user.length() != 0 && user.length()<20 && InputValidator.validateUser(user))
- html - 为什么我没有在一个项目周围得到一个完美的圆圈
- hyperledger-fabric - 如何在 ClientIdentity 中将 getAttributeValue() 用于织物垫片?
- python - 单击更新(提交)按钮后,如何使模态显示?
- react-native - 在本机反应中使用 axios 发布请求时出现错误 405