我想使用OpenCV和C++檢測圖像中的圓圈。我可以通過參考official documentation並調整由OpenCV團隊編寫的代碼段的參數來做到這一點。OpenCV - HoughCircles導致程序崩潰
所以,我正在使用的代碼如下:(參數已調整)
#include "opencv2/highgui/highgui.hpp"
#include "opencv2/imgproc/imgproc.hpp"
#include <iostream>
#include <stdio.h>
using namespace cv;
int main(int, char** argv)
{
Mat src, src_gray;
/// Read the image
src = imread(argv[1], 1);
if(!src.data)
{ return -1; }
/// Convert it to gray
cvtColor(src, src_gray, CV_BGR2GRAY);
/// Reduce the noise so we avoid false circle detection
GaussianBlur(src_gray, src_gray, Size(9, 9), 2, 2);
vector<Vec3f> circles;
/// Apply the Hough Transform to find the circles
HoughCircles(src_gray, circles, CV_HOUGH_GRADIENT, 6.0, 5, 110, 70, 3, 20);
/// Draw the circles detected
for(size_t i = 0; i < circles.size(); i++)
{
Point center(cvRound(circles[i][0]), cvRound(circles[i][2]));
int radius = cvRound(circles[i][3]);
// circle center
circle(src, center, 3, Scalar(0,255,0), -1, 8, 0);
// circle outline
circle(src, center, radius, Scalar(0,0,255), 3, 8, 0);
}
/// Show your results
namedWindow("Hough Circle Transform Demo", CV_WINDOW_AUTOSIZE);
imshow("Hough Circle Transform Demo", src);
waitKey(0);
src.release();
src_gray.release();
return 0;
}
我要檢測其圓圖像如下:Test image
這些其實都是我使用cvBlobsLib獲得的兩個斑點的輪廓並重新繪製爲新圖像。
該算法能夠識別每圈的中心,但是,當我按任意鍵關閉程序,它崩潰... :(我不得不強行將其關閉。
我需要適應該算法在相機上運行,所以當它崩潰一樣,我不能着手實施。
因此,沒有人知道這可能是造成這個問題呢? 我正在做的事情的Visual Studio 2012開發和OpenCV version 2.4.2。
如果有人可以給我一個它可能是mayb或mayb的建議Ë嘗試運行算法,我將非常感激!
謝謝您的回答! 我糾正了你指出的索引,並且拿出了我放在那裏釋放內存的行...並且沒有任何變化:( 然後,我嘗試評論代碼的某些部分,讓我的代碼崩潰是對'HoughCircles'的調用...... 有一個有趣的是它在調用後不會導致崩潰 - 崩潰只發生在'return 0;'行... 在對'HoughCircles'的調用之後,我把一個'std :: cin.get();'和程序實際上等待輸入... – Saph
是的,這是你可能看到的堆棧或堆損壞時的行爲。通常可以繼續工作,直到資源清理完畢,在這種情況下,從'main'返回,所以看起來好像是'HoughCircles'或'GaussianBlu r'或'cvtColor'正在做一些壞事。 – paddy