在函数中调用HoughCircles函数时,在函数返回处经常会出现Expression:_pFirstBlock == pHead(VS2013)问题,解决方案如下:
CSDN博客) OpenCV findContours函数崩溃的真正有效解决方案_amani_liu的博客-CSDN博客
参考上面这篇博客中讲述的findContours函数崩溃原因,可以推断HoughCircles函数崩溃原因类似。
HoughCircles函数的源码如下:
void cv::HoughCircles( InputArray _image, OutputArray _circles,
int method, double dp, double min_dist,
double param1, double param2,
int minRadius, int maxRadius )
{
//定义一段内存
Ptr<CvMemStorage> storage = cvCreateMemStorage(STORAGE_SIZE);
Mat image = _image.getMat(); //提取输入图像矩阵
CvMat c_image = image; //矩阵转换
//调用cvHoughCircles函数
CvSeq* seq = cvHoughCircles( &c_image, storage, method,
dp, min_dist, param1, param2, minRadius, maxRadius );
//把序列转换为矩阵
seqToMat(seq, _circles);
}
更改后的霍夫圆检测算法代码如下:
//重写HoughCircles函数
void Hough_Circles(const cv::Mat &_image, vector<cv::Vec3f> &_circles,
int method, double dp, double min_dist,
double param1, double param2,
int minRadius, int maxRadius)
{
//定义一段内存
cv::MemStorage storage(cvCreateMemStorage());
CvMat c_image = _image;
//调用cvHoughCircles函数
CvSeq* seq = cvHoughCircles(&c_image, storage, method,
dp, min_dist, param1, param2, minRadius, maxRadius);
for (int i = 0; i < seq->total; i++)
{
float* p = (float*)cvGetSeqElem(seq, i);
cv::Vec3f pt = cv::Vec3f(p[0], p[1], p[2]);
_circles.push_back(pt);
}
}
问题完美解决。
如果要转载,请标明出处,love you。