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

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

2
user10229833 10 Ноя 2019 в 19:14
1
Покажите нам картинку, пожалуйста
 – 
Dominux
10 Ноя 2019 в 19:19
1
Вы можете перебирать ограничивающую рамку и игнорировать пиксели за пределами вашего квадрата. Это легко решается с помощью маски.
 – 
Micka
10 Ноя 2019 в 20:37

2 ответа

Вы можете сделать это с помощью 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]]
3
fmw42 11 Ноя 2019 в 03:04

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

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

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

0
Paul92 10 Ноя 2019 в 19:21