Traceback (most recent call last): File "C:\Users\86158\PycharmProjects\pythonProject\11111111.py", line 22, in <module> kp_left, des_left = orb.compute(img_left, [cv2.KeyPoint(x[1], x[0], 5) for x in keypoints_left]) File "C:\Users\86158\PycharmProjects\pythonProject\11111111.py", line 22, in <listcomp> kp_left, des_left = orb.compute(img_left, [cv2.KeyPoint(x[1], x[0], 5) for x in keypoints_left]) cv2.error: OpenCV(4.6.0) :-1: error: (-5:Bad argument) in function 'KeyPoint' > Overload resolution failed: > - Argument 'x' can not be safely parsed to 'float'
时间: 2024-02-15 17:06:04 浏览: 255
这个错误通常是由于关键点的坐标类型不正确引起的。你可以尝试将关键点的坐标类型从整数转换为浮点数类型,如下所示:
```python
# 选取角点
keypoints_left = np.float32([np.array([x[1], x[0]], dtype=np.float32) for x in np.argwhere(harris_left > 0.01 * harris_left.max())])
keypoints_right = np.float32([np.array([x[1], x[0]], dtype=np.float32) for x in np.argwhere(harris_right > 0.01 * harris_right.max())])
# 计算描述符
orb = cv2.ORB_create()
kp_left, des_left = orb.compute(img_left, [cv2.KeyPoint(x[0], x[1], 5) for x in keypoints_left])
kp_right, des_right = orb.compute(img_right, [cv2.KeyPoint(x[0], x[1], 5) for x in keypoints_right])
```
在这里,我们首先将角点的坐标类型转换为浮点数类型(float32),然后再使用ORB.compute函数计算描述符时,将坐标的顺序也进行了修改。
这个修改应该可以解决你遇到的问题,如果还有其他问题,请随时告诉我。
相关问题
C:\Users\ASUS\PycharmProjects\PythonProject\.venv\Scripts\python.exe C:\Users\ASUS\PycharmProjects\PythonProject\.venv\玫瑰花.py Traceback (most recent call last): File "C:\Users\ASUS\PycharmProjects\PythonProject\.venv\玫瑰花.py", line 17, in <module> draw1() File "C:\Users\ASUS\PycharmProjects\PythonProject\.venv\玫瑰花.py", line 14, in draw1 rt(90,911) TypeError: rt() takes 1 positional argument but 2 were given
### 解决Python代码中rt函数调用时参数数量不匹配的问题
当遇到`TypeError: rt() takes 1 positional argument but 2 were given`错误时,这表明在调用`turtle.right()`或自定义的`rt()`方法时传递了过多的位置参数。通常情况下,在面向对象编程环境中,如果一个实例方法被设计成只接受一个额外的位置参数(除了隐式的`self`),那么实际上传递给它的参数数目应该正好等于这个预期数。
对于`turtle`库中的图形绘制功能而言,`right(angle)`方法仅需接收角度作为其唯一的位置参数[^4]。假设存在如下场景:
```python
import turtle
def draw_square():
t = turtle.Turtle()
# 错误示范:尝试给right方法传入两个位置参数
try:
t.rt(90, 45) # 这里引发了异常
except TypeError as e:
print(f"捕获到异常: {e}")
draw_square()
```
上述代码试图向`t.rt()`发送两个位置参数——这是不必要的,并且违反了API的设计初衷。为了修正这个问题,应当移除多余的参数或将它们转换为关键字参数形式(如果有适用的关键字)。正确的做法应该是像下面这样修改:
```python
import turtle
class MyTurtle(turtle.RawTurtle):
def __init__(self, canvas=None):
super().__init__(canvas)
def turn_right(self, angle=90): # 默认值设置为90度右转
self.right(angle)
def draw_square_with_custom_turtle():
screen = turtle.Screen()
my_turtle = MyTurtle(screen)
angles_to_turn = [90, 45]
for angle in angles_to_turn:
my_turtle.turn_right(angle) # 使用单个位置参数
screen.mainloop()
draw_square_with_custom_turtle()
```
在这个改进版本中,创建了一个继承自`turtle.RawTurtle`的新类`MyTurtle`并重写了`turn_right`方法以允许指定转动的角度,默认设为90度。这样做不仅解决了原始问题,还增加了灵活性和可读性。
#### 关键点总结
- `turtleright()`方法只需要一个表示旋转角度的位置参数。
- 如果看到类似的类型错误提示,则意味着可能无意间多提供了参数。
- 可以为方法提供默认参数值来增强接口友好性和健壮性。
运行报错C:\Users\Administrator\PycharmProjects\pythonProject\venv\Scripts\python.exe C:/Users/Administrator/PycharmProjects/pythonProject/main.py Traceback (most recent call last): File "C:/Users/Administrator/PycharmProjects/pythonProject/main.py", line 1, in <module> import pymysql ModuleNotFoundError: No module named 'pymysql'
这个错误提示是因为你的项目中没有安装pymysql模块,你需要在命令行中输入以下命令来安装pymysql模块:
```
pip install pymysql
```
如果你使用的是PyCharm开发环境,可以直接在PyCharm的Terminal中输入以上命令,也可以在PyCharm的Project Interpreter中搜索pymysql并安装。安装完成后,重新运行你的代码即可。
阅读全文
相关推荐

















