提问人:Loc Nguyen 提问时间:6/29/2023 最后编辑:OokerLoc Nguyen 更新时间:7/1/2023 访问量:62
如何测量由自定义网格线制成的单位正方形的单色区域?
How to measure an monochrome area with unit squares made from a custom gridline?
问:
我有一张带有这样网格线的图像,我想用由该网格线制成的单位正方形来测量每个单色区域。混合了不同颜色的方块不计算在内。在图像中,有 3 种颜色:黄色、橙色和蓝色。边框和网格线不计算在内。原始图像没有网格线。
到目前为止,我可以计算图像中黑白像素的数量,但我不知道如何自定义代码以满足我的需要。
答:
0赞
Leon Klute
6/29/2023
#1
您可以使用 np.unique 来计算 img 中所有颜色的出现次数:
import cv2
import numpy as np
# reading the image data from desired directory
img = cv2.imread("1OKN8m.jpg")
cv2.imshow('Image',img)
img_1d = img.reshape(img.shape[0]*img.shape[1], img.shape[2])
unique_colors, counts = np.unique(img_1d, axis=0, return_counts=True)
print(f'Unique colors: {unique_colors}')
print(f'Counts: {counts}')
因为它是JPEG,所以“单色”区域包含许多不同的颜色,因此您应该根据自己的情况选择所有足够接近的独特颜色,并计算它们的单个计数。
评论
0赞
Ooker
6/29/2023
似乎这只通过像素来计算?有没有办法通过网格线制成的正方形来计数?
0赞
Ooker
6/30/2023
print(img.shape[0]*img.shape[1], img_1d.size)
返回。 返回。每对中的数字不应该相同吗?4584300 13752900
print(unique_colors.size, counts.size)
481008 160336
0赞
Leon Klute
7/3/2023
size
似乎计算的是元素的总数,而不是第一个维度的大小,这个RGB图像的数字是3倍。
0赞
Leon Klute
7/3/2023
要计算正方形,您可以缩小图像的大小,但您必须计算网格线的大小,我估计 85 byt 115: ' img = cv2.resize(img, (85, 115), interpolation=cv2.INTER_AREA) '
0赞
Ooker
7/1/2023
#2
我认为要走的方法是将图像拆分为多个网格,然后检查各个部分是否是单色的。
评论