在Python中将图像作为参数传递给函数

3
我可以帮助您翻译。这是需要翻译的内容:

如何在Python中创建一个接受图像文件(而不是图像文件名)的函数。简单来说,就像下面这样:

FaceController.py

import cv2
from Computer_Vision import Face_Detector as FD


def detectface():
    img = cv2.imread('DSC_1902.JPG')
    FD.detect(img)


detectface()

Face_Detector.py

import cv2

def detect(img):
    face_cascade = cv2.CascadeClassifier('haarcascade_frontalface_default.xml')
    gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
    faces = face_cascade.detectMultiScale(gray, 1.3, 5)
    for (x,y,w,h) in faces:
        img = cv2.rectangle(img,(x,y),(x+w,y+h),(255,0,0),2)
    cv2.namedWindow('img',cv2.WINDOW_NORMAL)
    cv2.imshow('img', img)
    cv2.waitKey(0)
    cv2.destroyAllWindows()
    cv2.imwrite('messigray.png', img)
    return img

错误:

OpenCV Error: Assertion failed (!empty()) in cv::CascadeClassifier::detectMultiScale, file C:\projects\opencv-python\opencv\modules\objdetect\src\cascadedetect.cpp, line 1698
        faces = face_cascade.detectMultiScale(gray, 1.3, 5)
    cv2.error: C:\projects\opencv-python\opencv\modules\objdetect\src\cascadedetect.cpp:1698: error: (-215) !empty() in function cv::CascadeClassifier::detectMultiScale

就是那样。那段代码哪一部分不起作用? - Aran-Fey
已编辑问题,附带代码文件和错误信息 @Rawing - Mujtaba Faizi
你的 img 是空的。请检查文件是否存在,并且成功读取它。 - Kinght 金
好的,所以在这种情况下图像是空的。此外,函数调用没有使用返回值...但我仍然想知道是否有更好的方法。这种方式似乎是复制整个图像并将其传递到函数中,然后再从函数中传递回来,这似乎很昂贵。如何将图像引用传递给函数,在图像上绘制,并使这些更改在外部范围内实现? - Benice
2个回答

1
您可以传递指向图像的指针,而不是图像本身或图像文件的文件名。

编辑

def image_function(imagePointer):
    #DO SOMETHING WITH THE IMAGE

#HERE IS THE IMAGE POINTER
image = open('your_image.png')

#CALLING THE FUNCTION
image_function(image)

抱歉,我不懂opencv,无法帮助您的代码 :(

0

您实际上可以将图像作为张量传递。 使用cv2.imread()和torch。 这很容易,也很有用。

简短的回答: 使用cv2.imread()加载 使用以下代码将其转换为张量: img = torch.Tensor(img)/255.

这对我的应用程序有效。 您的应用程序可能略有不同。

代码回答:

from Computer_Vision import Face_Detector as FD

def detectface():
  import cv2 
  import torch
  
  folder = r"This Folder/"
  image_file = folder+"image.png"
  # or 
  # file = r"image.png"
  # image_file = os.path.join(folder, file)
  img = imread(image_file)
  
  img = torch.Tensor(img)/255. # THE KEY LINE HERE.

   FDdetect(img):
     """Do stuff with object detection..."""
     result = 
     return result

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接