以下代码如何修正corners = cv2.goodFeaturesToTrack(gray, 200, 0.01, 20) corners = corners.astype(int) sorted_idx = np.lexsort((corners[:, 1], corners[:, 0])) sorted_corners = corners[sorted_idx]
时间: 2024-03-01 19:52:12 浏览: 85
这段代码中存在一个问题,即`goodFeaturesToTrack`函数返回的`corners`数组的元素类型为`float32`,而在后续的代码中需要将其转换为`int`类型。这样做可能会导致精度的损失,从而影响后续的计算结果。
为了修正这个问题,可以将`corners`数组在转换为`int`类型之前先进行四舍五入的操作,从而保留一定的精度。修改后的代码如下:
``` python
corners = cv2.goodFeaturesToTrack(gray, 200, 0.01, 20)
corners = np.round(corners).astype(int)
sorted_idx = np.lexsort((corners[:, 1], corners[:, 0]))
sorted_corners = corners[sorted_idx]
```
这样做可以避免精度损失,从而保证后续计算的准确性。
相关问题
// Take first frame and find corners in it capture.Read(old_frame); Cv2.CvtColor(old_frame, old_gray, ColorConversionCodes.BGR2GRAY); Point2f[] p0 = Cv2.GoodFeaturesToTrack(old_gray, 100, 0.3, 7, null, 7, false, 0.04); Point2f[] p1 = new Point2f[p0.Length];
这段代码是用于对视频的第一帧图像进行处理,包括将其转换为灰度图像、使用GoodFeaturesToTrack()方法找到图像中的角点,并且初始化一个p1数组。其中,capture是用于读取视频帧的对象,Read()方法用于读取视频的一帧图像。Cv2.CvtColor()方法用于将BGR格式的图像转换为灰度图像,ColorConversionCodes.BGR2GRAY表示转换为灰度图像的代码。GoodFeaturesToTrack()方法用于检测图像中的角点,其中100表示最多检测100个角点,0.3表示角点检测的质量水平,7表示角点之间的最小距离,null表示不使用掩码,7表示使用7x7的Sobel算子计算图像的导数,false表示不使用Harris角点检测方法,0.04表示角点检测参数。p0和p1是两个用于存储角点的Point2f数组。
Traceback (most recent call last): File "F:\pycharm\group report\biaoding.py", line 85, in <module> corners = cv2.goodFeaturesToTrack(img, max_corners, quality_level, min_distance) cv2.error: OpenCV(4.7.0) D:\a\opencv-python\opencv-python\opencv\modules\imgproc\src\corner.cpp:254: error: (-215:Assertion failed) src.type() == CV_8UC1 || src.type() == CV_32FC1 in function 'cv::cornerEigenValsVecs'
这个错误是由于 OpenCV 在函数 `cv2.goodFeaturesToTrack()` 中调用了 `cv::cornerEigenValsVecs()` 函数,但是输入的图像不是 8 位无符号整数或 32 位浮点数。这可能是由于读入的图像类型不对或者图像处理过程中出现了错误。建议检查一下代码中读入图像的方式以及对图像的处理过程,确保图像类型正确并且没有出现错误。
阅读全文