Я новичок в OpenCV, но с немного удачи и много времени я был в состоянии взломать вместе некоторый код, который определяет отдельные ячейки в шахматной доске так:Как получить пиксели внутри четырехугольника, определенные четырьмя точками в OpenCV?
изображение кадра хранится в 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 пикселов внутри каждого четырехугольника?
Если внешний контур известен, 'cv :: drawContours' также может использоваться, не уверен, какой из них быстрее. Чтобы ускорить обработку маски, ROI можно вычислить с помощью 'cv :: boundingRect', который можно использовать в качестве маски для маски и изображения. – Micka
Спасибо вам всем! Похоже, все будет отлично. Я проверю его, как только вернусь домой – 64test1234
@ Микка, знаете ли вы, почему, когда я получаю неправильные значения RGB? Я получаю его, выполняя 'byte [] rgb = новый байт [3]; frame.get (x_, y_, rgb); 'и для белого/серого пикселя он возвращает -117, -107, -109 в массив байтов. И дело не только в том, что оно неподписанно, потому что этот цвет будет черным, если предполагается, что он будет белым/серым. Я знаю, что он проверяет правильный пиксель – 64test1234