使用opencv处理不同质量的图像

时间:2014-09-03 12:21:14

标签: python opencv

我正在分析图像以查找图像中的棕色物体。我正在对图像进行阈值处理,并将最黑暗的部分视为棕色细胞。但是,根据图像的质量,有时无法识别对象。在OpenCV Python中是否有任何解决方案,例如预处理灰度图像并定义棕色对特定图像的含义?

我用来查找棕色点的代码如下:

def countBrownDots(imageFile): im = cv2.imread(imageFile) #changing color space gray = cv2.cvtColor(im, cv2.COLOR_BGR2GRAY) gray = increaseBrighntness(gray) l1,thresh = cv2.threshold(gray,10,255,cv2.THRESH_BINARY_INV) thresh = ndimage.gaussian_filter(thresh, 16) l2,thresh = cv2.threshold(thresh,70,255,cv2.THRESH_BINARY) thresh = ndimage.gaussian_filter(thresh, 16) cv2.imshow("thresh22",thresh) rmax = pymorph.regmax(thresh) nim = pymorph.overlay(thresh, rmax) seeds,nr_nuclei = ndimage.label(rmax) cv2.imshow("original",im) cv2.imshow("browns",nim)

这是一个输入图像示例:

enter image description here

1 个答案:

答案 0 :(得分:0)

看看HSV色彩空间中的图像,这里是并排堆叠的3个平面

enter image description here

虽然人们建议基于色调进行分割,但实际上饱和度和值平面中存在更多的判别信息。对于这个特定的图像,灰度(即值平面)可能比使用色调得到更好的结果。但是,没有理由丢弃颜色信息。

作为概念验证(使用Gimp)进行颜色分割,我只是随机选择一个棕色斑点并将所有颜色从该点到颜色距离小于60变为绿色以获得:

enter image description here

如果你稍微玩一下参数,你可能会得到你想要的。然后编写代码。 我尝试预处理mean shift filtering来图像化图像,但这并没有真正帮助。