我有一个图像,其中定义了四个角点。现在,我要获取由4个角定义的区域的像素值。问题是,尽管它是一个矩形,但它有一个“坡度”,这意味着两个上角点和两个下角点都没有处于相同的高度。我如何仍然可以解决此问题?
我还没有找到任何东西。感谢您的支持! :)
要遍历倾斜的矩形不是很容易。因此,您可以做的是旋转整个图像,使矩形再次平行于边。
为此,您可以将一侧的斜率计算为y坐标上的差异与拐角x坐标上的差异。您获得的值是斜率。斜率的反正切是与水平线的夹角。您需要使用与此值相反(负)的角度旋转图像。
为了使其更有效率,您可以裁剪一些图像。
您可以使用Python / OpenCV通过从四个点首先在黑色背景上绘制白色填充的多边形作为蒙版来做到这一点。使用np.where定位并打印图像中与蒙版中白色像素相对应的所有点。
输入:
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()
遮罩:
结果:
[[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]]