OpenCV HoughCircles函数使用出现Expression:_pFirstBlock == pHead(VS2013)问题解决方案

在函数中调用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。

猜你喜欢

转载自blog.csdn.net/lyychlj/article/details/117789305
今日推荐