cv2.error: OpenCV(4.7.0) D:\a\opencv-python\opencv-python\opencv\modules\calib3d\src\fundam.cpp:385: error: (-28:Unknown error code -28) The input arrays should have at least 4 corresponding point sets to calculate Homography in function 'cv::findHomography'
时间: 2023-07-03 19:32:38 浏览: 374
这个错误通常是由于输入的特征点数目不足引起的。`cv2.findHomography` 函数需要至少4对特征点来计算单应性矩阵,如果输入的特征点数不足4对,则会出现这个错误。
你可以检查一下你的特征点数量,看看是否足够进行单应性矩阵的计算。另外,你也可以使用条件语句来判断特征点数量是否足够,例如:
```python
if len(src_pts) >= 4 and len(dst_pts) >= 4:
M, mask = cv2.findHomography(src_pts, dst_pts, cv2.RANSAC, 5.0)
else:
# 处理特征点数量不足的情况
```
在特征点数量不足时,可以采取一些策略来增加特征点,例如使用图像金字塔缩放图像、调整特征点提取方法等。
相关问题
D:\Users\CBT\AppData\Local\Programs\Python\Python311\python.exe D:\python\camera\webcam_canny.py Traceback (most recent call last): File "D:\python\camera\webcam_canny.py", line 52, in <module> image_points, _ = cv2.projectPoints(object_points, rot_vec, trans_vec, camera_matrix, dist_coeffs) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ cv2.error: OpenCV(4.7.0) D:\a\opencv-python\opencv-python\opencv\modules\calib3d\src\calibration.cpp:632: error: (-5:Bad argument) Intrinsic parameters must be 3x3 floating-point matrix in function 'cvProjectPoints2Internal' Process finished with exit code 1
这个错误提示显示相机内参 `camera_matrix` 的数据类型不正确,需要是一个3x3的浮点数矩阵。你可以检查一下 `camera_matrix` 是否符合要求,或者尝试将其数据类型转换为浮点数。你可以尝试在代码中添加以下语句将相机内参转换为浮点数:
```python
camera_matrix = np.array([[1000.0, 0.0, 320.0], [0.0, 1000.0, 240.0], [0.0, 0.0, 1.0]], dtype=np.float32)
```
这里将相机内参的数据类型设置为 `np.float32`,以确保其为浮点数类型。如果还是遇到问题,可以检查一下代码中其他涉及到相机内参的部分,比如相机标定的代码是否有误,或者是否有其他地方对相机内参进行了修改。
修改这段代码:OpenCV(4.7.0) /io/opencv/modules/calib3d/src/solvepnp.cpp:242: error: (-215:Assertion failed) npoints >= 4 && npoints == std::max(ipoints.checkVector(2, CV_32F), ipoints.checkVector(2, CV_64F)) in function 'solvePnPRansac' 报错:OpenCV(4.7.0) /io/opencv/modules/calib3d/src/solvepnp.cpp:242: error: (-215:Assertion failed) npoints >= 4 && npoints == std::max(ipoints.checkVector(2, CV_32F), ipoints.checkVector(2, CV_64F)) in function 'solvePnPRansac'
这个错误是因为在调用solvePnPRansac函数时传递的点数小于4个或者输入的点数据类型不正确。在solvePnPRansac函数之前,你需要检查输入的点是否满足要求,如果不满足,则需要进行相应的处理。你可以添加以下代码来检查输入点的数量和数据类型是否正确:
```cpp
if (ipoints.total() < 4) {
std::cerr << "Error: Number of input points is less than 4!" << std::endl;
return -1;
}
if (ipoints.type() != CV_32FC2 && ipoints.type() != CV_64FC2) {
std::cerr << "Error: Input points data type is not correct!" << std::endl;
return -1;
}
```
如果满足条件,则可以继续调用solvePnPRansac函数,否则返回错误代码,提示用户输入正确的点数据。
阅读全文