我正在尝试检测棋盘图像的角。我尝试过使用 goodFeaturesToTrack 和 findChessboardCorners,但它们都以同样的方式失败。他们返回的角 vector 似乎为空。 (即大小是-2948392 ...内存错误类型的东西)。
gray = imread("C:/Users/Wesley/Desktop/New folder/cb.png",0);
// Parameters for Shi-Tomasi algorithm
std::vector<cv::Point2f> corners;
double qualityLevel = 0.1;
double minDistance = 10;
int blockSize = 3;
bool useHarrisDetector = false;
double k = 0.04;
int maxCorners = 30;
Mat copy;
copy = gray.clone();
// Apply corner detection
goodFeaturesToTrack(gray,
corners,
maxCorners,
qualityLevel,
minDistance,
Mat(),
blockSize,
useHarrisDetector,
k );
int r = 4;
for( int i = 0; i < corners.size(); i++ )
{ circle( copy, corners[i], r, Scalar(255, 255,255), -1, 8, 0 ); }
// Show what you got
imshow( "source_window", copy );
这一定是我做错了什么。由于内存访问冲突,一旦调用 corners.size(),它就会崩溃。如果它有任何区别,这在 Qt 中。
希望有人能指出我正确的方向!
最佳答案
请检查您不是在 Release模式下编译,而是在 Debug模式下链接,反之亦然。
如果您链接到错误的库,OpenCV 会给您带来最奇怪的行为。
关于c++ - OpenCV 角点检测返回空角 vector ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29082280/