You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python函数图像传递接收问题:cv2.imshow报TypeError错误

解决cv2.imshow抛出TypeError: Expected cv::UMat for argument 'mat'的问题

嘿,这个问题其实一眼就能找到症结!咱们先拆解下错误原因:

你的stills函数返回的是包含两个图像的元组:(sub_frame, final),但当你调用cv2.imshow('frame', something)时,something就是这个元组——而cv2.imshow的第二个参数需要的是单个图像矩阵(也就是numpy数组,对应OpenCV里的cv::UMat类型),直接传元组当然会触发类型错误啦。

解决方法分两种场景:


场景1:你只想显示函数返回的某一张图像

直接从元组里取出对应的元素即可,比如:

# 调用函数
something = stills("abc.jpg")
# 显示人脸子图(sub_frame)
cv2.imshow('face subframe', something[0])
cv2.waitKey()
# 或者显示带框的完整图(final)
cv2.imshow('full image with boxes', something[1])
cv2.waitKey()

场景2:你想获取并显示所有检测到的人脸子图

那你函数里注释掉的sub_frames列表就派上用场了,修改函数和调用逻辑如下:

def stills(user_image):
    sub_frames = []  # 取消注释,用来存所有人脸子图
    fqp_image_src = user_image
    raw_pic = cv2.imread(fqp_image_src)
    mpic = cv2.resize(raw_pic,(0,0), fx=0.30, fy=0.30)
    mpic_rgb = cv2.cvtColor(mpic, cv2.COLOR_BGR2RGB)
    face_boxes = haar_cascade_face.detectMultiScale(mpic_rgb, scaleFactor = 1.2, minNeighbors = 5)
    final = mpic.copy()  # 提前复制原图,避免循环里反复修改同一变量
    for face_box in face_boxes:
        # 画框到复制后的图上
        final = cv2.rectangle(final, (face_box[0], face_box[1]), 
                              ((face_box[0]+face_box[2]),(face_box[1]+face_box[3])), 
                              (0,255,0),2)
        sub_frame = final[face_box[1]:(face_box[1]+face_box[3]), face_box[0]:(face_box[0]+face_box[2])]
        sub_frames.append(sub_frame)
        # cv2.imshow('frame', sub_frame) # 可保留内部预览,也可去掉
        # cv2.waitKey()
    return (sub_frames, final)

# 调用并显示所有人脸
something = stills("abc.jpg")
face_subframes = something[0]
full_img = something[1]

# 先显示带框的完整图
cv2.imshow('full image', full_img)
cv2.waitKey()

# 循环显示每一张人脸子图
for idx, face in enumerate(face_subframes):
    cv2.imshow(f'face {idx+1}', face)
    cv2.waitKey()

另外补充个小细节:你原来的循环里每次都用final = cv2.rectangle(mpic,...),其实会反复修改原始的mpic,提前用final = mpic.copy()可以避免破坏原图哦。

内容的提问来源于stack exchange,提问作者JubG

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.14 07:04:28