Java 如何获取OpenCV中由四个点定义的四边形内部的像素?
我是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
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它不是交换的,它是矩阵表示法;)很高兴听到你能解决这个问题。