【问题标题】:Why is it giving me TypeError: Expected cv::UMat for argument 'src'?为什么它给我 TypeError: Expected cv::UMat for argument 'src'?
【发布时间】:2019-06-14 17:18:09
【问题描述】:

我在为家庭作业编写的一些代码中遇到了问题。 我认为mask = source[B-R].point(lambda i: i < -26) 不能分配给函数cv2.dilate(mask, kernel,iterations=1) 我将发布代码的照片

import PIL
from PIL import Image
import numpy as np
import cv2

image = cv2.imread ('/Applications/Python 3.7/Input/1.jpg', 0)
image = Image.open ('/Applications/Python 3.7/Input/1.jpg')

source = image.split()
R, G, B = 0, 1, 2   

mask = source[B-R].point(lambda i: i < -26)  

kernel = np.ones((9, 9))
mask = cv2.dilate(mask, kernel, iterations=1)

【问题讨论】:

    标签: python numpy opencv


    【解决方案1】:

    您的掩码必须是 UMat 类型。您的图像是某种 PIL 图像格式。原图为:

    print(image.format)
    JPEG
    

    你的面具是这样的:

    print(mask.format)
    None
    

    您也没有使用cv.imread阅读的图像

    您可以使用 opencv 创建一个简单的掩码,例如像这样:

    b,g,r = cv2.split(image)
    res = b-r
    ret = res[res<26]
    mask = cv2.dilate(ret, kernel, iterations=1)
    

    【讨论】:

    • "您的掩码必须是 UMat 类型。" -- 不一定,仅当您想使用透明 API 时。更常见的是,它是一个 numpy 数组,就像在您的示例代码中一样。
    • 你需要在没有0的情况下阅读它,所以它是彩色而不是灰度。 image = cv2.imread ('/Applications/Python 3.7/Input/1.jpg')
    • 朱利安感谢您的帮助。我有一些问题想私下问你。这是我的电子邮件:alesalvini@gmail.com 请给我发短信
    猜你喜欢
    • 2019-06-12
    • 2021-01-29
    • 2020-10-03
    • 2021-12-09
    • 2019-08-03
    • 2019-12-13
    • 2021-05-29
    • 2021-04-15
    相关资源
    最近更新 更多