java - 如何在OpenCV中获取由四个点定义的四边形内部的像素?

标签 java opencv image-processing computer-vision chess

我是 OpenCV 的新手,但凭借一点运气和大量时间,我能够编写一些代码来检测棋盘中的单个单元,如下所示:

chessboard

图像帧存储在 Mat 中角点存储在 MatOfPoint2f 中.

显示我如何使用矩阵单独绘制单元格的代码:

private void draw(final Mat frame) {
    for (int x = 0; x < BOARD_SIZE - 1; x++)
        for (int y = 0; y < BOARD_SIZE - 1; y++) {
            final int index = x + y * BOARD_SIZE;
            final Point topLeft = cornerPoints.get(index);
            final Point bottomLeft = cornerPoints.get(index + BOARD_SIZE);
            final Point topRight = cornerPoints.get(index + 1);
            final Point bottomRight = cornerPoints.get(index + 1 + BOARD_SIZE);

            // left line
            Imgproc.line(frame, topLeft, bottomLeft, DEBUG_COLOR);
            // right line
            Imgproc.line(frame, topRight, bottomRight, DEBUG_COLOR);
            // top line
            Imgproc.line(frame, topLeft, topRight, DEBUG_COLOR);
            // bottom line
            Imgproc.line(frame, bottomLeft, bottomRight, DEBUG_COLOR);
        }
}

如何使用四个点(单元格的角)来获取每个四边形内部像素的 RGB 值?

最佳答案

从顶点创建蒙版。您可以使用 fillPoly 来实现这一点。 然后迭代像素。如果像素(x,y)在您的掩码中有效,则读取 RGB,否则继续。使用极端顶点限制像素迭代范围。

关于java - 如何在OpenCV中获取由四个点定义的四边形内部的像素?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35262858/

相关文章:

php - 在从数据库中获取图像时,使用带有 php 的图像 magick 来调整图像大小

java - JPA/hibernate : ManyToMany delete relation

java - Java 中的 Image.GetScaledInstance() 不工作

Java Scanner(File) 行为异常,但 Scanner(FIleInputStream) 始终处理同一个文件

ios - 无法使用 cocoapods 安装 opencv,无法解析主机 : hivelocity. dl.sourceforge.net

iOS:如何用 GPU 能力减去两个视频帧?

java - Java中的CSV文件操作。添加 Material

python - 如何在使用 imwrite 进行阈值处理后将图像保存在 opencv 中

python - 'NoneType' 对象没有属性 'shape'

c# - 如何识别/检查模糊图像?