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

Java 如何获取OpenCV中由四个点定义的四边形内部的像素?,java,opencv,image-processing,computer-vision,chess,Java,Opencv,Image Processing,Computer Vision,Chess,我是OpenCV新手,但幸运的是,我花了很多时间破解了一些代码,可以检测棋盘上的单个细胞,如下所示: 图像帧存储在中,角存储在中 显示如何使用矩阵单独绘制单元格的代码: 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 ind

我是OpenCV新手,但幸运的是,我花了很多时间破解了一些代码,可以检测棋盘上的单个细胞,如下所示:

图像帧存储在中,角存储在中

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

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);
        }
}
private void draw(最终垫框){
对于(int x=0;x

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

从顶点创建遮罩。你可以用fillPoly来做这个。
然后在像素上迭代。如果像素(x,y)在遮罩中有效,请读取RGB,否则继续。使用极端顶点限制像素迭代范围。

从顶点创建遮罩。你可以用fillPoly来做这个。
然后在像素上迭代。如果像素(x,y)在遮罩中有效,请读取RGB,否则继续。使用极端顶点限制像素迭代范围。

掩蔽有效。如果你有很多多边形,或者没有太多的内存,多边形中的点测试可能会更有效,特别是如果你能保证你的四边形是凸的。请参见掩蔽工程。如果你有很多多边形,或者没有太多的内存,多边形中的点测试可能会更有效,特别是如果你能保证你的四边形是凸的。请参见

如果已知外轮廓,也可以使用
cv::drawContours,但不确定哪一个更快。为了加速掩模处理,可以使用
cv::boundingRect
计算ROI,该ROI可用作掩模和图像的SUMBNAGE。谢谢!听起来会很好用的。我会在回家后测试它,不知道,因为我没有openCV java经验。openCV java不是使用双精度进行像素检索吗?您的图像是字节图像吗?这行吗:?Sry我不是OpenCVexpert@64test1234它不是交换的,它是矩阵表示法;)很高兴听到你能解决这个问题。如果已知外轮廓,也可以使用
cv::drawContours
,但不确定哪一个更快。为了加速掩模处理,可以使用
cv::boundingRect
计算ROI,该ROI可用作掩模和图像的SUMBNAGE。谢谢!听起来会很好用的。我会在回家后测试它,不知道,因为我没有openCV java经验。openCV java不是使用双精度进行像素检索吗?您的图像是字节图像吗?这行吗:?Sry我不是OpenCVexpert@64test1234它不是交换的,它是矩阵表示法;)很高兴听到你能解决这个问题。