opencv 检测直线检测不到了。求帮助~!!

2024-12-22 23:25:47
推荐回答(1个)
回答1:

你可真有分,上次的既然我没有解释清楚怎么不继续追问?
问清楚再给分啊。
根据你这个图我觉得用霍夫检测直线效果不好,晚上给你仔细看看。

加了if 之后就是把斜率限定在了10-30度这个范围。
由于你这个小斜线的斜率目测是这个范围,没有检测出来可能有如下两个原因:
1 你要检测的部分斜率不是10-30度
2 由于曲线不够直,导致检测的不是一条直线,而是很多零碎的线段。

测试方法:
通过绘制不同颜色的线段来观察是否是检测到得一条线段(还是很多线段连接成的一条曲线)

通过对 三个通道加不同的颜色来绘制。

uchar R=(rand() % 205) +50;
uchar G=(rand() % 205) +50;
uchar B=(rand() % 205) +50;
(产生从50-255的随机数)

修改后代买
lines = cvHoughLines2 (cannyImg, storage, CV_HOUGH_PROBABILISTIC,1,CV_PI/180, 10, 5, 10);
for (int i = 0; i < lines->total; i++){
CvPoint* line = (CvPoint*)cvGetSeqElem (lines, i);
double slope = ((double)(line[0].y - line[1].y))/((double)(line[0].x - line[1].x)); //斜率
if(atan(slope) > 10 && atan(slope) < 30){ //要在10-30度之间的直线
uchar R=(rand() % 205) +50;
uchar G=(rand() % 205) +50;
uchar B=(rand() % 205) +50;

cvLine (pImgDst, line[0], line[1], CV_RGB(R,G,B),2,8); //画出红色直线
}
}

结束之后贴结果,我给你继续解答