numpy 给定特定的像素坐标,在python中获取颜色

oxf4rvwz  于 2023-01-17  发布在  Python
关注(0)|答案(2)|浏览(167)

假设我有一个800x600的图像:

我有一个HTML map元素,它定义了多个多边形区域(本例中只定义了一个,即Tenessee):

<img src="usa-colored-regions-map.jpg" usemap="#image-map">

<map name="image-map">
    <area target="" alt="" title="" href="" coords="492,379,521,376,562,377,568,363,583,355,589,347,595,340,570,343,535,348,515,349,507,355,494,355,491,370" shape="poly">
</map>

我想用python来检测每个多边形的颜色,我只想得到主色,因为每个州都有白色的文本,这可能会扭曲结果。
我怎样才能做到这一点?

igsr9ssn

igsr9ssn1#

方法:
1.为每个多边形绘制一个mask。使用OpenCV绘图调用在黑色背景上绘制一个白色填充的多边形。不使用抗锯齿。
1.使用蒙版选择该区域的所有像素。values = img[mask]
1.取该列表的中值。每个通道的中值应该可以使用:np.median(values, axis=0)
就是这样。

ki1q1bka

ki1q1bka2#

我是这样解决这个问题的:

req = urllib.request.urlopen(image_url)

arr = np.asarray(bytearray(req.read()), dtype=np.uint8)
img: np.array = cv2.imdecode(arr, -1)
# draw polygon on input to visualize
gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
img_poly = img.copy()

coords = '174,477,213,477,213,557,174,557' # from the area tag
points = np.fromstring(coords, sep=',', dtype=np.int32).reshape((-1, 2))

# create mask for polygon
mask = np.zeros_like(gray)
cv2.polylines(img_poly, [points], True, (0, 0, 255), 2)
cv2.fillPoly(mask, [points], (255))
mean = cv2.mean(img_poly, mask)
color = np.empty((4))
color[:] = mean

相关问题