为什么cv2抛出错误的参数错误?如何成功运行它



我已经使用tkinter接口将所有变量声明为全局I m,用于二分析图像

global img, img1,img2,img3

以下是用于显示的两个功能

def hist():
global img2,img3
transform = transforms.Grayscale()
img2 = transform(img2)
img2 = ImageOps.equalize(img2,mask=None)
img2 = img2.resize((180, 180))
img2 = ImageTk.PhotoImage(img2)
canvas9.create_image(96, 96, image=img2)
canvas9.place(x=730,y=60)

运行此函数后,我收到错误在此过程中,我正在img3中复制img2,并且我面临问题

def rgb():
global img3,img2
img3 = img2.copy()
img3=cv2.cvtColor(img3,cv2.COLOR_BGR2RGB)
img3 = img3.resize((180, 180))
img3 = ImageTk.PhotoImage(img3)
canvas10.create_image(96, 96, image=img3)
canvas10.place(x=370,y=320)

错误

这是我获取的错误

File "C:python310libtkinter__init__.py", line 1921, in __call__
return self.func(*args)
File "C:UsersABHISHEKPycharmProjectscervical_projectgui.py", line 23, in rgb
img3=cv2.cvtColor(img3,cv2.COLOR_BGR2RGB)
cv2.error: OpenCV(4.5.5) :-1: error: (-5:Bad argument) in function 'cvtColor'
> Overload resolution failed:
>  - src is not a numpy array, neither a scalar
>  - Expected Ptr<cv::UMat> for argument 'src'

您不分青红皂白地混合OpenCV/numpy和PIL。

img3 = img2.copy()
img3 = cv2.cvtColor(img3, cv2.COLOR_BGR2RGB)

所以你实际上在使用img2。它是什么?

img2 = ImageTk.PhotoImage(img2)

Tk PhotoImages与OpenCV不兼容

自己检查类型:

print(type(img3)) # right before calling cvtColor

最新更新