遍历所有像素以检查哪些像素为白色,哪些像素为黑色

时间:2019-06-04 10:09:30

标签: python opencv

我正在尝试遍历只有黑白像素的图像。我想为每个黑色像素降低一个分数,而我想为每个白色像素增加一个分数。但是,在测试以下代码后,出现此错误:

private static func writeToFile(text: String) {

        guard let path = NSSearchPathForDirectoriesInDomains(.documentDirectory, .userDomainMask, true).first else { return }
        guard let writePath = NSURL(fileURLWithPath: path).appendingPathComponent(Logger.folderName) else { return }
        let fileManager = FileManager.default

        try? fileManager.createDirectory(atPath: writePath.path, withIntermediateDirectories: true)
        let file = writePath.appendingPathComponent(Logger.fileName)

        if !fileManager.fileExists(atPath: file.path) {
            do {
                try "".write(toFile: file.path, atomically: true, encoding: String.Encoding.utf8)
            } catch _ {
            }
        }

        let msgWithLine = text + "\n"
        do {
            let fileHandle = try FileHandle(forWritingTo: file)
            //fileHandle.seekToEndOfFile()
            fileHandle.write(msgWithLine.data(using: .utf8)!)
            fileHandle.closeFile()
        } catch {
            print("Error writing to file \(error)")
        }
    }

它与ValueError: The truth value of an array with more than one element is ambiguous. 语句有关。该阵列中如何有多个像素?我不是通过使用img[i, j]来专门调用一个像素吗?有人知道我该如何解决这个问题,或者是否还有另一种访问1个特定像素的有效方法?

img[i,j]

使用openCV库读取图像。然后将原始图像过滤为特定的颜色,并使用该颜色创建蒙版。如前所述,该蒙版只有黑白像素。

def score(img):
    score = 0

    height, width, _ = img.shape
    for i in range(height):
        for j in range(width):
            if img[i, j] == [255,255,255]:
                score = score + 1
            else:
                score = score - 1
    print(score)

3 个答案:

答案 0 :(得分:1)

发生这种情况是因为img[i, j]给出了一个具有RGB值的数组

img [i,j] = [0,0,0]#代表黑色

img [i,j] = [255,255,255]#for white

这些数组未与TrueFalse关联。您需要更改条件。

>>> img[0,0] == [0,0,0]
array([ True,  True,  True])
>>> all(img[0,0] == [0,0,0])
True

您的条件需要一个all()

答案 1 :(得分:0)

这意味着您的数组具有3维。您可以打印img[i,j]以查看其外观。您想要的值可能经常位于同一位置,因此调用img[i,j,0]img[i,j,1]应该可以

答案 2 :(得分:0)

您在这里= ^ .. ^ =

from PIL import Image

# load image
img = Image.open('BlackWhite.gif').convert('RGB')
pixel = img.load()

# calculate the score
score = 0
w=img.size[0]
h=img.size[1]
for i in range(w):
  for j in range(h):
      if pixel[i, j] == (255, 255, 255):
          score += 1
      elif pixel[i, j] == (0, 0, 0):
          score -= 1