gpt4 book ai didi

python - 如何从 Python 3 的对话框中打开图像文件?

转载 作者:太空宇宙 更新时间:2023-11-03 23:10:22 24 4
gpt4 key购买 nike

我正在尝试创建一个简单的界面,用户可以从中选择要作为输入的图像。然后我使用 numpy 和 opencv 在图像上做一些事情。我使用了 tkinter 的 askopenfilename() 和 easygui 的 fileopenbox。他们似乎没有返回图像。

我得到的错误是:TypeError: src is not a numpy array, neither a scalar

我的代码

import numpy as np
import cv2 as cv
import easygui

face_cascade = cv.CascadeClassifier('face.xml')
def todo():
img = easygui.fileopenbox()
gray = cv.cvtColor(img, cv.COLOR_BGR2GRAY)
faces = face_cascade.detectMultiScale(gray, 7, 7)
for (x,y,w,h) in faces:
cv.rectangle(img,(x,y),(x+w,y+h),(255,0,0),2)
roi_gray = gray[y:y+h, x:x+w]
roi_color = img[y:y+h, x:x+w]


cv.imshow('img',img)
cv.waitKey(0)
cv.destroyAllWindows()

todo()

最佳答案

发生错误是因为您传递了一个要作为图像文件读取的 Unicode 对象。 img = easygui.fileopenbox() 行返回 img 作为 Unicode 不是预期的图像数组。

你如何转换它?

  • 首先将 unicode 转换为字符串。有一个库 unicodedata 就是为了这个目的。 (我已经在下面的代码中展示了如何使用它)
  • 接下来读取该字符串并将生成的图像文件存储为数组。

下面的代码可以帮到你

代码:

import numpy as np
import cv2
import easygui
import unicodedata

path = 'C:/Users/Jackson/Desktop/Stack/face_detection/'
face_cascade = cv2.CascadeClassifier(path + 'haarcascade_frontalface_default.xml')

uni_img = easygui.fileopenbox()
img_path = unicodedata.normalize('NFKD', uni_img).encode('ascii','ignore')

img = cv2.imread(img_path, 1)
gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
faces = face_cascade.detectMultiScale(gray, 1.3, 5)
for (x,y,w,h) in faces:
cv2.rectangle(img,(x,y),(x+w,y+h),(255,0,0),2)
roi_gray = gray[y:y+h, x:x+w]
roi_color = img[y:y+h, x:x+w]


cv2.imshow('img',img)
cv2.waitKey(0)
cv2.destroyAllWindows()

更新:

我已经对您提供的代码进行了必要的修改。只需复制以下内容并执行它:

import numpy as np
import cv2 as cv
import easygui

face_cascade = cv.CascadeClassifier('face.xml')
def todo():

#--- returns the Unicode ---
uni_code = easygui.fileopenbox()

#--- converting unicode to string ---
img_path = unicodedata.normalize('NFKD', uni_code).encode('ascii','ignore')
img = cv2.imread(img_path, 1)
gray = cv.cvtColor(img, cv.COLOR_BGR2GRAY)
faces = face_cascade.detectMultiScale(gray, 7, 7)
for (x,y,w,h) in faces:
cv.rectangle(img,(x,y),(x+w,y+h),(255,0,0),2)
roi_gray = gray[y:y+h, x:x+w]
roi_color = img[y:y+h, x:x+w]


cv.imshow('img',img)
cv.waitKey(0)
cv.destroyAllWindows()

todo()

关于python - 如何从 Python 3 的对话框中打开图像文件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51408987/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com