1
#include <cv.h>
#include <highgui.h>
#include <math.h>
int main(int argc, char** argv)
{
IplImage* src;
if(argc == 2 && (src=cvLoadImage("qqqq.jpg", 0))!= 0)
{
IplImage* dst = cvCreateImage(cvGetSize(src), 8, 1);
IplImage* color_dst = cvCreateImage(cvGetSize(src), 8, 3);
CvMemStorage* storage = cvCreateMemStorage(0);
CvSeq* lines = 0;
int i;
cvCanny(src, dst, 50, 200, 3);
cvCvtColor(dst, color_dst, CV_GRAY2BGR);
#if 1
lines = cvHoughLines2(dst,
storage,
CV_HOUGH_STANDARD,
1,
CV_PI/180,
100,
0,
0);
for(i = 0; i < MIN(lines->total,100); i++)
{
float* line = (float*)cvGetSeqElem(lines,i);
float rho = line[0];
float theta = line[1];
CvPoint pt1, pt2;
double a = cos(theta), b = sin(theta);
double x0 = a*rho, y0 = b*rho;
pt1.x = cvRound(x0 + 1000*(-b));
pt1.y = cvRound(y0 + 1000*(a));
pt2.x = cvRound(x0 - 1000*(-b));
pt2.y = cvRound(y0 - 1000*(a));
cvLine(color_dst, pt1, pt2, CV_RGB(255,0,0), 3, 8);
}
#else
lines = cvHoughLines2(dst,
storage,
CV_HOUGH_PROBABILISTIC,
1,
CV_PI/180,
80,
30,
10);
for(i = 0; i < lines->total; i++)
{
CvPoint* line = (CvPoint*)cvGetSeqElem(lines,i);
cvLine(color_dst, line[0], line[1], CV_RGB(255,0,0), 3, 8);
}
#endif
cvNamedWindow("Source", 1);
cvShowImage("Source", src);
cvNamedWindow("Hough", 1);
cvShowImage("Hough", color_dst);
cvWaitKey(0);
}
}
我在opencv中使用此代碼來檢測圖像中的對象。和程序運行沒有任何錯誤。但結果是隻有一個控制檯窗口很快出現並迅速消失。我應該爲此做些什麼。如何解決opencv和C++中的hough變換中的錯誤
程序應該無限期地等待'cvWaitKey(0);'但由於它不是,我懷疑,可能是圖像沒有得到加載(在第一個條件)。你能重新檢查一下嗎? – SuperSaiyan
圖像路徑是否正確。是否有任何方法檢查圖像是否加載? – Thar1988
你這樣做的方式已經足夠了 - 檢查返回值是否爲非零。控制進入if塊嗎? – SuperSaiyan