如何使用opencv python实现PIL.ImageOps.solarize?
我尝试了这个代码,但发现颜色不一样如何使用opencv python实现PIL.ImageOps.solarize?,python,opencv,python-imaging-library,Python,Opencv,Python Imaging Library,我尝试了这个代码,但发现颜色不一样 from PIL import ImageOps from PIL import Image im = Image.open(imgpth) impil = np.array(im) imcv = cv2.imread(imgpth)[:, :, ::-1].copy() print(np.sum(imcv - impil)) impil_sol = np.array(ImageOps.solarize(im, threshold=128)) idx = i
from PIL import ImageOps
from PIL import Image
im = Image.open(imgpth)
impil = np.array(im)
imcv = cv2.imread(imgpth)[:, :, ::-1].copy()
print(np.sum(imcv - impil))
impil_sol = np.array(ImageOps.solarize(im, threshold=128))
idx = imcv > 128
imcv_sol[idx] = 255 - imcv_sol[idx]
print(np.sum(impil_sol - imcv_sol))
第一个输出为0,但第二个输出不是0。PIL.ImageOps.solarize到底做了什么?我如何使用opencv python实现它?在您给定的代码中有一些错误和遗漏;实际上,它甚至没有编译。请注意始终提供一个适当的 第一个问题是,
imcv\u sol
没有正确初始化。第二个问题是,对的描述似乎是错误的(我强调):
将所有像素值反转到阈值上方
让我们看一下以下修改后的代码:
导入cv2#请提供所有必要的导入
作为np导入numpy#请提供所有必要的导入
从PIL导入ImageOps
从PIL导入图像
im=Image.open('path/to/your/Image.png'))
impil=np.数组(im)
imcv=cv2.imread('path/to/your/image.png')[:,:,::-1]
打印(np.总和(imcv-impil))
impil_sol=np.array(ImageOps.solarize(im,阈值=128))
imcv_sol=imcv.copy()#imcv_sol没有初始化?
idx=imcv>=128#阈值似乎也被合并,即这里是>=而不是>
imcv_sol[idx]=255-imcv[idx]
打印(np.总和(impil_sol-imcv_sol))
如果我对任何图像运行该代码,我会得到正确的输出:
0
0
如果切换到idx=imcv>128
,则存在偏差
您可以检查我的假设,如果您查看具有给定阈值的所有像素,例如,获取ids=impil==128
,然后检查impil\u sol[ids]
。所有值都是127
,因此(也)所有值为128
的像素必须已反转,这在上述描述中没有反映出来
希望有帮助