我们知道我们在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