在python

时间:2016-01-04 12:45:11

标签: python python-2.7 threshold

我们知道我们在python,二进制,inv二进制,tozero,truncate和otsu中都有阈值,但问题是我想首先应用范围阈值,即我想要改变其中的像素颜色具体范围说,所有颜色为0-100的像素都应该变为白色,剩下的应该具有与它们相同的颜色。

我通过循环图像来做到这一点,我只是想知道在python中有更快更好的方法吗?

def ApplyCustomRangeThreshold(self,min = 0,max = 100):
    print self.sceneImage.shape
    itemVal = 0

    imageWidth = self.sceneImage.shape[1]
    imageHeight = self.sceneImage.shape[0]

    xPos = 0
    yPos = 0
    print imageHeight
    print imageWidth

    totalPx = 0

    while xPos < imageWidth:
        while yPos < imageHeight:
            currentPx = self.sceneImage[yPos,xPos]
            totalPx = totalPx + 1
            if currentPx[0] >= min and currentPx[0] < 100:
                self.sceneImage.itemset((yPos, xPos, 0), 255)
                self.sceneImage.itemset((yPos, xPos, 1), 255)
                self.sceneImage.itemset((yPos, xPos, 2), 255)

            yPos = yPos + 1

        yPos = 0
        xPos = xPos + 1


    print totalPx
    print self.sceneImage.size



    _,self.sceneImage = cv2.threshold(self.sceneImage,200,255,cv2.THRESH_BINARY)

我通过使用np liberary在图像中使用条件,称为屏蔽技术来解决问题所以现在上面的代码看起来像这样 在min和max范围内的所有像素将保持不变,所有其他像素将更改为changeTo

中提供的值
def ApplyCustomRangeThreshold(self,image,min = 120,max = 200,changeTo = 255):
  maska =  image >= min
  maskb =  image <= max
  actualMask = np.logical_not(np.logical_and(maska,maskb))

  #all those pixels that are not satisfying condition mask a and b

  image[ np.where ( actualMask ) ] = changeTo 
  _,image= cv2.threshold(image,200,255,cv2.THRESH_BINARY) #to make image in black and white

0 个答案:

没有答案