作业帮 > 综合 > 作业

opencv 点梯度值怎么求?然后怎么算?

来源:学生作业帮 编辑:拍题作业网作业帮 分类:综合作业 时间:2024/04/30 16:58:06
opencv 点梯度值怎么求?然后怎么算?


想求出各点的梯度值,然后把梯度值小于多少的点都删除掉,只留下中间那条倾斜度较大的斜线.
最后求斜线的位置~

这个要怎么写啊?求指导~

想保留的斜线就是黄色圈起来的那段,求他的位置.
拜托,梯度值是啥啊?是求导之后的值,也就是说边缘的锐利程度.您这个叫斜率啊,哥们.
根据你的问题,我建议采用如下两种操作.方法A:利用霍夫变换检测直线.根据检测出来的直线的斜率过滤掉斜率低于一个阈值的直线上所有的点.然后再次检测霍夫直线,再去掉线上的点.直到算法结束.
方法B:通过从左到右的X坐标遍历,将这条线的的每个点的(x,y)压进<vector>里.:得到了一个点的序列之后,相邻10个点计算这两个点的斜率, (y1-y2)/(x1-x2)如果斜率在一定的范围,比如在A点和B点连接,倾角为3度,那么就继续操作.如果斜率超过阈值,那么就提出这两个点,然后缩小范围.继续操作,直到结果出来.

再问: 。。。新手~ 斜率应该怎么算啊???
再答: 额,斜率不是初中讲的吗? 斜率是(y1-y2)/(x1-x2) 两点之间的倾角是 arctan((y1-y2)/(x1-x2))
再问: CvSeq* lines = cvHoughLines2 (pImgCanny, storage, CV_HOUGH_PROBABILISTIC, 1, CV_PI/180, 80, 200, 10); 这个 x1 , y1 要怎么算出来啊。。。
再答: for(i = 0; i < MIN(lines_left->total,100); i++) { CvPoint* point = (CvPoint*)cvGetSeqElem(lines_left,i);//cvGetSeqElem will return some useful pointer double slope = ((double)(point[1].y - point[0].y))/((double)(point[1].x - point[0].x)); double intercept = (double)(point[1].y - slope*(double)(point[1].x)); double point_distance=sqrt((double)(point[1].y - point[0].y)*(double)(point[1].y - point[0].y) + ((double)(point[1].x - point[0].x))*((double)(point[1].x - point[0].x))); } 这行程序是读取直线sequence中点的坐标,并求取斜率,和y轴的截距,以及两个点之间的距离 你的基础好差
再问: 这个 point[0] 和 point[1] 是怎么回事???为什么有两个???
再答: 线段的起点和终点
再问: 那线段中间的那个点怎么表示啊 point[0.5]????