簡體   English   中英

Python OpenCV 類型錯誤:預期的 Ptr<cv::umat> 對於參數“lowerb”和顏色問題</cv::umat>

[英]Python OpenCV TypeError: Expected Ptr<cv::UMat> for argument 'lowerb', and color problems

免責聲明:我是 OpenCv 的初學者,所以可能存在非常簡單的錯誤所以我准備了一個代碼來計算給定邊界中的像素,然后將坐的計數保存在一個數組中,以便可以計算pcc 使用它們。

def PCCprepare():
    print("[LOG] reporting!")
    tot_pixel = 0
    pixels = []
    old_b = 0
    old_g = 0

    dir = os.listdir("res")
    for filename in dir:
        i = 0
        img = cv2.imread("res/" + filename)

        output = cv2.bitwise_and(img, img)
        tot_pixel += output.size
        for b in range(4):
            for g in range(4):
                for r in range(4):
                    lower = [b * 63.75, g * 63.75, r * 63.75]
                    print(lower)
                    if b > old_b:
                        upper = ([(b + 1) * 63.75, g * 63.75, r * 63.75])
                    elif g > old_g:
                        upper = ([b * 63.75, (g + 1) * 63.75, r * 63.75])
                    else:
                        upper = ([b * 63.75, g * 63.75, (r + 1) * 63.75])
                    print(upper)
                    old_g = g
                    old_b = b

                    mask = cv2.inRange(img, lower, upper)
                    output = cv2.bitwise_and(img, img, mask=mask)

                    try:
                        pixels[i] += np.count_nonzero(output)
                    except:
                        pixels.append(np.count_nonzero(output))
                    i += 1

它曾經適用於固定邊界,但就目前而言,它總是返回以下異常:

Ignoring exception in command imgSetup:
Traceback (most recent call last):
  File "C:\Users\user\Downloads\Mash_The_CharacterCreator\venv\lib\site-packages\discord\ext\commands\core.py", line 85, in wrapped
    ret = await coro(*args, **kwargs)
  File "C:/Users/user/Downloads/Mash_The_CharacterCreator/bot.py", line 727, in waifuSet
    await ctx.send("<@!" + str(ctx.message.author.id) + "> " + imgWorks.PCCprepare())
  File "C:\Users\user\Downloads\Mash_The_CharacterCreator\WaifuMeterPNG.py", line 53, in PCCprepare
    mask = cv2.inRange(img, lower, upper)
TypeError: Expected Ptr<cv::UMat> for argument 'lowerb'

另外,如果有人可以幫助我解決邊界問題,因為我想計算所有可能的顏色,而以前我像這樣使用過

lower = [b * 63.75, g * 63.75, r * 63.75]
print(lower)
upper = [(b + 1) * 63.75, (g + 1) * 63.75, (r + 1) * 63.75]
print(upper)

但它會導致重疊和不准確的界限,所以如果有人更熟悉這個主題會為他們提出一些更好的解決方案,我會很高興

Python中,function cv2.inRange(src, lowerb, upperb, dst)lowerbupperb參數不接受列表,只支持元組。 因此,不要使用括號,只需將它們更改為括號:

lower = (b * 63.75, g * 63.75, r * 63.75)

我已經在我的機器上使用更新的lowerupper變量測試了你的代碼,它可以工作。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM