KarynaSakura 2024-04-25 16:01 采纳率: 41.7%
浏览 20

如何解决No overloads for "xx" match the provided arguments?

在使用OpenCV库时会遇到一个很烦的问题
No overloads for "polylines" match the provided arguments

img

虽然跑起来没问题

img

完整报错:

img

完整代码

import cv2
import numpy as np

class Tri(object):
    def __init__(self, A:tuple[float,float], B:tuple[float,float], C:tuple[float,float]):
        self.dots = np.array([[A,B,C]],dtype=np.float32)
    
    def mask(self, mask_size: tuple[int, int]):
        mark_cloth = np.zeros(mask_size,dtype=np.uint8)
        dots = (self.dots * np.array(mask_size)).astype(np.int32)
        cv2.polylines(mark_cloth, dots, 1, 255)
        cv2.fillPoly(mark_cloth, dots, 255)
        return mark_cloth
    
t = Tri((0,0),(0.5,0.8),(0.8,0.4))
cv2.imshow('',t.mask((400,400)))
cv2.waitKey()
cv2.destroyAllWindows()
  • 写回答

5条回答 默认 最新

  • 专家-赤兔[在线] 全栈领域优质创作者 2024-04-25 16:01
    关注

    引自免费微信小程序:皆我百晓生

    在您提供的代码中,错误源于cv2.polylines()cv2.fillPoly() 函数参数类型不匹配。根据OpenCV的文档,这两个函数期望输入的是numpy数组而不是NDArray[int32]。此外,颜色参数应为Scalar类型,即一个包含四个元素(BGR和透明度)的一维numpy数组。以下是修复后的代码:

    import cv2
    import numpy as np
    
    class Tri:
        def __init__(self, A:tuple[float,float], B:tuple[float,float], C:tuple[float,float]):
            self.dots = np.array([[A,B,C]],dtype=np.float32)
    
        def mask(self, mask_size: tuple[int, int]):
            mark_cloth = np.zeros(mask_size,dtype=np.uint8)
            dots = (self.dots * np.array(mask_size)).astype(np.int32)
    
            # 将dots转换为列表,因为polylines和fillPoly需要list作为输入
            dots_list = dots.tolist()
    
            # 创建一个 Scalar 对象作为颜色参数
            color = (255, 255, 255, 0)  # 这里是白色,最后一个元素是透明度,0表示完全不透明
    
            # 使用cv2.polylines()函数
            cv2.polylines(mark_cloth, [dots_list], True, color)
    
            # 使用cv2.fillPoly()函数
            cv2.fillPoly(mark_cloth, [dots_list], color)
    
            return mark_cloth
    
    t = Tri((0,0),(0.5,0.8),(0.8,0.4))
    cv2.imshow('', t.mask((400,400)))
    cv2.waitKey()
    cv2.destroyAllWindows()
    

    在这个修复版本中,我做了以下更改:

    1. dots转换成list,因为OpenCV的polylinesfillPoly函数期望输入是一个点集的列表。
    2. 创建了一个Scalar对象,将颜色参数从整数(例如255)更改为一个包含四个元素的numpy数组,这样可以确保与OpenCV的颜色格式兼容。

    现在这个代码应该能正确运行,并且不会产生之前的错误。

    评论 编辑记录

报告相同问题?

问题事件

  • 创建了问题 4月25日

悬赏问题

  • ¥15 模电中二极管,三极管和电容的应用
  • ¥15 关于模型导入UNITY的.FBX: Check external application preferences.警告。
  • ¥15 气象网格数据与卫星轨道数据如何匹配
  • ¥100 java ee ssm项目 悬赏,感兴趣直接联系我
  • ¥15 微软账户问题不小心注销了好像
  • ¥15 x264库中预测模式字IPM、运动向量差MVD、量化后的DCT系数的位置
  • ¥15 curl 命令调用正常,程序调用报 java.net.ConnectException: connection refused
  • ¥20 关于web前端如何播放二次加密m3u8视频的问题
  • ¥15 使用百度地图api 位置函数报错?
  • ¥15 metamask如何添加TRON自定义网络