Python PIL FROMARY函数正在给wierd颜色映射

Python PIL FROMARY函数正在给wierd颜色映射,python,opencv,tkinter,python-imaging-library,Python,Opencv,Tkinter,Python Imaging Library,我正在编写一个用于测试opencv函数的小gui,以便轻松更改参数值(用于阈值、blob检测等)。我开始使用tkinter编写gui,并使用Image.fromarray函数获得wierd结果-我的图像得到蓝色色调;当我用cv2.imshow显示时,没有这样的色调,所以它一定是fromarry的人工制品。我按预期检查了模式及其RGB。图像对在斑点检测之前和之后(绘制小圆圈)。左边的一对是opencv,右边的一对在我的tkinter gui中 tk_img=Image.fromar

我正在编写一个用于测试opencv函数的小gui,以便轻松更改参数值(用于阈值、blob检测等)。我开始使用tkinter编写gui,并使用Image.fromarray函数获得wierd结果-我的图像得到蓝色色调;当我用cv2.imshow显示时,没有这样的色调,所以它一定是fromarry的人工制品。我按预期检查了模式及其RGB。图像对在斑点检测之前和之后(绘制小圆圈)。左边的一对是opencv,右边的一对在我的tkinter gui中

        tk_img=Image.fromarray(newImg) 
        tk_photo=ImageTk.PhotoImage(tk_img)
        mod=tk_img.mode
        print('mode:'+str(mod))
        label1 = Tkinter.Label(self, image=tk_photo)
        label1.image = tk_photo
        label1.grid(row = Imrow, column = Im2col, columnspan = Im2col, sticky=Tkinter.NW)
        self.update()

        cv2.imshow('orig', currentImg)
        cv2.waitKey(0)
        cv2.imshow('current', newImg)
        cv2.waitKey(0)
        cv2.destroyAllWindows()

OpenCV使用BGR颜色顺序处理图像。您需要更改颜色顺序

newImg = newImg[...,[2,1,0]]

查看这一步了解更多信息

所以我做了一个艰难的解决办法,将图像保存到临时文件并读取:r=cv2.imwrite('temp.jpg',img)tk_img=image.open('temp.jpg')tk_photo=ImageTk.PhotoImage(tk_img)。我会看看枕头是否也这样做,或者这是否已在补丁中修复。(枕头也可以在3.x上使用。)