我正在尝试遍历只有黑白像素的图像。我想为每个黑色像素降低一个分数,而我想为每个白色像素增加一个分数。但是,在测试以下代码后,出现此错误:
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)
答案 0 :(得分:1)
发生这种情况是因为img[i, j]
给出了一个具有RGB值的数组
img [i,j] = [0,0,0]#代表黑色
img [i,j] = [255,255,255]#for white
这些数组未与True
或False
关联。您需要更改条件。
>>> 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