В вашем коде есть несколько ошибок и упущений;на самом деле это даже не компилируется. Пожалуйста, обратите внимание, чтобы всегда предоставлять правильный минимальный воспроизводимый пример .
Первая проблема заключается в том, что imcv_sol
не инициализирован должным образом. Вторая проблема заключается в том, что описание PIL.ImageOps.solarize
кажется неправильным (выделение мной):
Инвертировать все значения пикселей выше пороговое значение.
Давайте посмотрим на следующий модифицированный код:
import cv2 # Please provide all necessary imports
import numpy as np # Please provide all necessary imports
from PIL import ImageOps
from PIL import Image
im = Image.open('path/to/your/image.png')
impil = np.array(im)
imcv = cv2.imread('path/to/your/image.png')[:, :, ::-1]
print(np.sum(imcv - impil))
impil_sol = np.array(ImageOps.solarize(im, threshold=128))
imcv_sol = imcv.copy() # imcv_sol was nowhere initialized?
idx = imcv >= 128 # threshold seems to be also incorporated, i.e. >= instead of > here
imcv_sol[idx] = 255 - imcv[idx]
print(np.sum(impil_sol - imcv_sol))
Если я запускаю этот код для любого изображения, я получаю правильный вывод:
0
0
Если я переключусь на idx = imcv > 128
, будут отклонения.
Вы можете проверить мое предположение, если вы посмотрите на все пиксели с заданным порогом, например, выберите ids = impil == 128
, изатем осмотрите impil_sol[ids]
. Все значения 127
, поэтому (также) все пиксели со значением 128
должны быть инвертированы, что не отражено в приведенном выше описании.
Надеюсь, это поможет!