称检测点查询java_java – 检查一个点是否在指定的Rectangle内

好的,所以我正在为Java类做一个赋值,并且赋值的一部分是找出一个点是否在矩形的维度内.所以我创建了这段代码:

public boolean contains(Point p){

return (this.getLocation().getX() < p.getX() && this.getLocation().getY() < p.getY() &&

this.getLocation().getX() + this.getWidth() > p.getX() &&

this.getLocation().getY() + this.getHeight() > p.getY());

}

我也创建了一个点类,这就是我要求“Point p”参数的原因.为了测试这个布尔值,我在Main类中创建了一个简单的’if’语句:

//check if one rectangle's point is inside another

if (rectangle.contains(rectangle2.getLocation()))

System.out.println("the point is in the rectangle");

该点的位置是(6,7).矩形1的点,宽度和高度分别为(4,5),9和3.我知道这一点是在第一个矩形内,但是println语句没有显示,这意味着我创建的布尔值必定存在问题,但我没有看到错误,也许我的头是阴天但是可能有人指出我这里有什么问题?

附:这是所有的控制台工作,我没有处理一些GUI或图形编程.

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
好的,以下是一个基于JavaCV实现人脸检测和特征标定的示例程序,你可以在本地环境中运行它: ```java import java.io.File; import org.bytedeco.opencv.global.opencv_imgcodecs; import org.bytedeco.opencv.opencv_core.Mat; import org.bytedeco.opencv.opencv_core.Rect; import org.bytedeco.opencv.opencv_core.Scalar; import org.bytedeco.opencv.opencv_face.FaceRecognizer; import org.bytedeco.opencv.opencv_face.FisherFaceRecognizer; import org.bytedeco.opencv.opencv_objdetect.CascadeClassifier; import org.bytedeco.opencv.opencv_core.Point; import org.bytedeco.opencv.opencv_core.RectVector; import org.bytedeco.opencv.opencv_core.Size; import static org.bytedeco.opencv.global.opencv_core.CV_32SC1; import static org.bytedeco.opencv.global.opencv_imgcodecs.imread; import static org.bytedeco.opencv.global.opencv_imgproc.*; public class FaceDetector { public static void main(String[] args) { //加载人脸检测器 CascadeClassifier faceDetector = new CascadeClassifier("haarcascade_frontalface_alt.xml"); //加载特征检测器 String landmarksPath = "shape_predictor_68_face_landmarks.dat"; FaceLandmarkDetector landmarkDetector = new FaceLandmarkDetector(landmarksPath); //加载人脸识别器 FaceRecognizer faceRecognizer = FisherFaceRecognizer.create(); faceRecognizer.read("face_recognizer.xml"); //加载测试图片 String imagePath = "test.jpg"; Mat image = imread(imagePath); //检测人脸 RectVector faceDetections = new RectVector(); faceDetector.detectMultiScale(image, faceDetections); //在检测到的人脸区域中标定特征 for (int i = 0; i < faceDetections.size(); i++) { Rect face = faceDetections.get(i); Mat faceImage = new Mat(image, face); RectVector landmarks = landmarkDetector.detect(faceImage); drawLandmarks(faceImage, landmarks); //识别人脸 int[] label = new int[1]; double[] confidence = new double[1]; faceRecognizer.predict(faceImage, label, confidence); String name = "Unknown"; if (confidence[0] < 100) { name = "Person " + label[0]; } //在图片上标出人脸区域和识别结果 rectangle(image, face, new Scalar(0, 255, 0, 0), 3, 8, 0); putText(image, name, new Point(face.x(), face.y() - 10), FONT_HERSHEY_PLAIN, 1.5, new Scalar(0, 255, 0, 0), 2, LINE_AA, false); } //保存结果图片 opencv_imgcodecs.imwrite("result.jpg", image); } /** * 在人脸上标定68个特征 * * @param faceImage 人脸图像 * @param landmarks 特征坐标 */ private static void drawLandmarks(Mat faceImage, RectVector landmarks) { for (int i = 0; i < landmarks.size(); i++) { Point point = landmarks.get(i); circle(faceImage, point, 2, new Scalar(0, 255, 0, 0), -1, 8, 0); } } } ``` 在这个程序中,我们首先加载了人脸检测器、特征检测器和人脸识别器,然后加载了一张测试图片,并在其中检测人脸。对于每个检测到的人脸,我们在其中标定出68个特征,并用识别器识别出人脸的身份。最后,我们在原始图片上标出人脸区域和识别结果,并将结果保存到本地。 需要注意的是,这个程序依赖于OpenCV和Dlib库,请先在本地环境中安装好这两个库,并将JavaCV相关的jar包添加到项目的classpath中。同时,需要将人脸检测器和特征检测器的模型文件和人脸识别器的训练结果文件放置在正确的路径下。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值