Как получить значения пикселей внутри прямоугольника на изображении - PullRequest
0 голосов
/ 10 ноября 2019

У меня есть изображение, где определены четыре угловые точки. Теперь я хочу получить значения пикселей в регионе, который определяется 4 углами. Проблема в том, что, хотя это и прямоугольник, он имеет «уклон», что означает, что ни две верхние угловые точки, ни нижняя не находятся на одной высоте. Как я могу все еще решить эту проблему?

Я еще ничего не нашел для этого .. Я был бы признателен за любую поддержку! :)

Ответы [ 2 ]

0 голосов
/ 11 ноября 2019

Вы можете сделать это с помощью Python / OpenCV, сначала нарисовав закрашенный белым многоугольник на черном фоне в качестве маски из четырех точек. Используйте np.where, чтобы найти, а затем распечатать все точки на изображении, соответствующие белым пикселям в маске.

Ввод:

enter image description here

import cv2
import numpy as np

# read image
image = cv2.imread('lena.png')

# create mask with zeros
mask = np.zeros((image.shape), dtype=np.uint8)

# define points (as small diamond shape)
pts = np.array( [[[25,20],[30,25],[25,30],[20,25]]], dtype=np.int32 )
cv2.fillPoly(mask, pts, (255,255,255) )

# get color values
values = image[np.where((mask == (255,255,255)).all(axis=2))]
print(values)

# save mask
cv2.imwrite('diamond_mask.png', mask)

cv2.imshow('image', image)
cv2.imshow('mask', mask)
cv2.waitKey()


Маска:

enter image description here

Результаты:

 [[108 137 232]
 [104 134 232]
 [108 136 231]
 [106 134 231]
 [109 133 228]
 [108 136 229]
 [109 137 230]
 [110 135 232]
 [103 126 230]
 [112 134 228]
 [114 136 228]
 [111 138 230]
 [110 137 233]
 [103 135 234]
 [103 126 230]
 [101 120 226]
 [108 137 230]
 [112 133 228]
 [114 136 227]
 [115 139 232]
 [112 137 232]
 [105 134 233]
 [102 128 232]
 [ 98 119 226]
 [ 93 105 220]
 [108 139 230]
 [110 137 230]
 [112 135 230]
 [113 135 230]
 [111 138 231]
 [112 139 232]
 [109 134 233]
 [101 128 232]
 [100 120 224]
 [ 90 104 221]
 [ 87  95 211]
 [111 138 229]
 [109 135 231]
 [109 136 230]
 [113 141 233]
 [110 139 233]
 [105 136 234]
 [101 127 232]
 [ 95 117 225]
 [ 90 107 220]
 [110 137 231]
 [110 138 231]
 [107 140 236]
 [110 139 233]
 [104 135 234]
 [105 130 231]
 [ 92 116 227]
 [114 141 234]
 [112 142 235]
 [111 140 235]
 [111 138 234]
 [110 132 232]
 [114 140 234]
 [108 140 233]
 [107 134 233]
 [107 140 235]]
0 голосов
/ 10 ноября 2019

Нелегко перебирать наклонный прямоугольник. Поэтому вы можете повернуть все изображение так, чтобы прямоугольник снова был параллелен сторонам.

Для этого вы можете вычислить наклон одной стороны как разницу в координате y относительно разности в координате x углов. Значение, которое вы получите, это уклон. Арктангенс склона - это угол к горизонтали. Вам нужно повернуть изображение с противоположным (отрицательным) значением.

Чтобы сделать его более эффективным, вы можете немного обрезать изображение.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...