Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/385.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/opencv/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 使用由小方块定义的OpenCV在图像上检测物体的角点和角度?_Java_Opencv_Image Processing_Computer Vision_Opencv3.0 - Fatal编程技术网

Java 使用由小方块定义的OpenCV在图像上检测物体的角点和角度?

Java 使用由小方块定义的OpenCV在图像上检测物体的角点和角度?,java,opencv,image-processing,computer-vision,opencv3.0,Java,Opencv,Image Processing,Computer Vision,Opencv3.0,我一直在努力寻找JAVA中最好、最简单的方法——如何使用OpenCV检测图像中的迷宫,并计算图像旋转到水平位置时的角点和角度 迷宫由放置在角落处的3个小黄纸正方形定义 我找到了这个局部解决方案:-但我没有技能将其修改为为为我工作:-/ 两种测试图像情况: 谢谢大家的帮助 好的,谢谢你对我问题的鼓励。多亏了它,我找到了部分soloution: Mat mazeImage = Imgcodecs.imread("vzory/real_5.jpg"); //, Imgcodecs.CV_L

我一直在努力寻找JAVA中最好、最简单的方法——如何使用OpenCV检测图像中的迷宫,并计算图像旋转到水平位置时的角点和角度

迷宫由放置在角落处的3个小黄纸正方形定义

我找到了这个局部解决方案:-但我没有技能将其修改为为为我工作:-/

两种测试图像情况:


谢谢大家的帮助

好的,谢谢你对我问题的鼓励。多亏了它,我找到了部分soloution:

    Mat mazeImage = Imgcodecs.imread("vzory/real_5.jpg"); //, Imgcodecs.CV_LOAD_IMAGE_COLOR
    Mat hsv = new Mat();
    Mat treshold = new Mat();
    Mat hierarchy = new Mat();
    Imgproc.cvtColor(mazeImage, hsv, Imgproc.COLOR_BGR2HSV);
    Core.inRange(hsv, new Scalar(20,135,135), new Scalar(30, 255, 255), treshold);

    List<MatOfPoint> contours = new ArrayList<>();
    Imgproc.findContours(treshold, contours, hierarchy, Imgproc.RETR_LIST, Imgproc.CHAIN_APPROX_SIMPLE);

    PointContourCollection pointContourCollection = new PointContourCollection(new PointContourComparator());

    for (MatOfPoint contour : contours) {
        Point center = new Point();
        Moments moments = Imgproc.moments(contour);
        center.x = (int) (moments.m10/moments.m00);
        center.y = (int) (moments.m01/moments.m00);

        double area = Imgproc.contourArea(contour);

        if(area > 0.1){
            pointContourCollection.add(new PointContour(center, area, contour));
        }
    }

    Imgproc.drawContours(mazeImage, contours, -1, new Scalar(0, 255, 0), 5);
Mat mazeImage=Imgcodecs.imread(“vzory/real_5.jpg”);/,Imgcodecs.CV\u加载\u图像\u颜色
Mat hsv=新Mat();
Mat treshold=新Mat();
Mat层次结构=新Mat();
Imgproc.cvtColor(mazeImage、hsv、Imgproc.COLOR_BGR2HSV);
Core.inRange(hsv,新标量(20135135),新标量(30,255,255),treshold);
列表等高线=新的ArrayList();
Imgproc.findContours(树梢、轮廓、层次、Imgproc.RETR\u列表、Imgproc.CHAIN\u近似值\u简单值);
PointContourCollection PointContourCollection=新点ContourCollection(新点ContourComparator());
用于(点轮廓:轮廓){
点中心=新点();
力矩=Imgproc.力矩(轮廓);
中心x=(int)(矩.m10/矩.m00);
中心y=(int)(矩.m01/矩.m00);
双面积=Imgproc.轮廓面积(轮廓);
如果(面积>0.1){
添加(新的点轮廓(中心、面积、轮廓));
}
}
绘制等高线图(mazeImage,等高线,-1,新标量(0,255,0),5);

类PointContourCollection-ArrayList的扩展-仅用于存储具有中心位置及其面积的黄色角落。角点使用PointContourComparator按面积大小进行排序

真的吗?你期待有人会在这里为你发明算法吗?这是一个学习计算机视觉的很酷的项目,不要让任何人给你答案,如果你自己找到了,这将意味着你对计算机视觉有更多的了解:)如果你有关于如何做某事的具体问题,我们将提供帮助。这是个大问题,我觉得很好!为什么偏?因为我现在需要找到一些将图像旋转到水平位置的解决方案。但有一个“小”问题——labyrint可以旋转四次。我已经计算了(现在)所有直线的角度,但现在我需要找到soloution如何决定哪个角度是实现良好旋转的“最佳”方式您想如何旋转它?