我处理了织物材料以获得如下图所示的图像:
原始图片:
处理后的图像:
现在,我想连续查找白色簇的数量。如果所有聚类都是均匀且水平的,我将运行一个循环以计算强度的上升和下降,以找到聚类的数量,但事实并非如此。如果通过上述方法获取几行的中位数/均值,所需答案相差很大。
有没有办法在行不必完全水平的约束下准确地对它们进行计数?还是采用任何方法都可以使任务更简单?
答案 0 :(得分:2)
我仍在进一步考虑这一点,但就目前而言, ImageMagick 确实对图像进行了校正。只需在终端(或Windows上的命令提示符)中:
convert fabric.jpg -deskew 50% result.jpg
这是动画,如果您将图像从-20度旋转到+20度,将在右侧显示每行的投影(行总和)。在左侧变为水平时,观看最右边的列:
答案 1 :(得分:0)
我想您可以找到连接的组件数量,并获得如下所示的标签数量。这里 bp8OO.jpg 您的灰度图像。现在,我想您可以对此进行操作以找出每一行中的行数。
import cv2
import numpy as np
img = cv2.imread('bp8OO.jpg', 0)
img = cv2.threshold(img, 127, 255, cv2.THRESH_BINARY)[1] # ensure binary
ret, labels = cv2.connectedComponents(img)
print("Number of labels" , len(labels))
def show_components(labels):
# Map component labels to hue val
label_hue = np.uint8(179*labels/np.max(labels))
blank_ch = 255*np.ones_like(label_hue)
labeled_img = cv2.merge([label_hue, blank_ch, blank_ch])
# cvt to BGR for display
labeled_img = cv2.cvtColor(labeled_img, cv2.COLOR_HSV2BGR)
# set bg label to black
labeled_img[label_hue==0] = 0
cv2.imshow('labeled.png', labeled_img)
cv2.waitKey()
show_components(labels)