gpt4 book ai didi

java - 如何根据角点和单元格数计算交点

转载 作者:太空宇宙 更新时间:2023-11-03 23:07:55 25 4
gpt4 key购买 nike

我试图根据我一直拥有的 4 个角点和单元格数量(在我的例子中是 9,所以 9x9 矩阵,数独游戏)找到所有交点(它们的 x 和 y 值)。

我的 4 个角标有绿色十字,并标记为 P1 到 P4。我试图计算它,但只设法精确地计算出第一行。

double xDis = p2.x - p1.x;
double yDis = p2.y - p1.y;
double xW = xDis / 9;
double yH = yDis / 9;
for (int i = 0; i < 10; i++) {
Point point = new Point(p1.x + (i * xW), p1.y + (i * yH));
}

此代码将完全按照我的预期工作,但仅适用于第一行。我在这里错过了什么?是否有某种算法已经做到了这一点?欢迎任何提示。请注意,我使用的是带有 OpenCV 库的 android。

points

最佳答案

正如上面评论中所写,我最终扭曲了图像然后进行了切割。看起来像这样

if (points != null) {
Point p1 = points[0];
Point p2 = points[1];
Point p3 = points[2];
Point p4 = points[3];

MatOfPoint2f src = new MatOfPoint2f(
p1,
p2,
p3,
p4);

drawMarker(frame, p1, new Scalar(255,0,0), 0, 20, 1);
drawMarker(frame, p2, new Scalar(255,0,0), 0, 20, 1);
drawMarker(frame, p3, new Scalar(255,0,0), 0, 20, 1);
drawMarker(frame, p4, new Scalar(255,0,0), 0, 20, 1);

double x = p2.x - p1.x;
double y = p3.y - p2.y;

MatOfPoint2f dst = new MatOfPoint2f(
new Point(0, 0),
new Point(x,0),
new Point(0,y),
new Point(x,y)
);

Mat warpMat = Imgproc.getPerspectiveTransform(src, dst);
//This is you new image as Mat
Mat destImage = new Mat();
Imgproc.warpPerspective(bw2, destImage, warpMat, new Size(x, y));

List<Mat> cells = getCells(destImage, destImage.width() / 9, destImage.height / 9);


}



private List<Mat> getCells(Mat m, int width, int height) {

Size cellSize = new Size(width, height);
List<Mat> cells = new ArrayList<>();

for (int row = 0; row < 9; row++) {
for (int col = 0; col < 9; col++) {
Rect rect = new Rect(new Point(col * width, row * height), cellSize);

Mat digit = new Mat(m, rect).clone();
cells.add(digit);
}
}

return cells;
}

关于java - 如何根据角点和单元格数计算交点,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55366135/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com