// 5. 用直线拟合一组点------------------------------------------------------
cv::Mat image = cv::imread("../../aTestImage/road2.jpg", 0);//Building
cv::Mat contours;
//阈值1:确定应该包含所有认为是属于明显图像轮廓的边缘像素
//阈值2:定义属于所有重要边缘,剔除异常值(不连续边缘点)
//磁滞阈值化
cv::Canny(image, contours, 125, 350);//主体为白色
cv::namedWindow("contours", 1);
cv::imshow("contours", contours);
LinesFinder finder;
finder.setLineLengthAndGap(100, 20);
finder.setMinVote(80);
//cv::Vec4i : (x0,y0, x1,y1)
std::vector lines = finder.findLines(contours);
int n = 1;//选择contours中的一条线: 如第2条
cv::Mat oneline(contours.size(), CV_8U, cv::Scalar(0));
cv::line(oneline, cv::Point(lines[n][0], lines[n][1]),
cv::Point(lines[n][2], lines[n][3]), cv::Scalar(255), 10);
cv::bitwise_and(contours, oneline, oneline);// 跟轮廓contours作 与 运算
cv::namedWindow("oneline", 1);
cv::imshow("oneline", oneline);
//将oneline中的点放入到cv::points集合中
std::vector points;
for (int y = 0; y < oneline.rows; y++)
{
uchar *rowPtr = oneline.ptr(y);
for (int x = 0; x < oneline.cols; x++)
{
if (rowPtr[x])
{
points.push_back(cv::Point(x, y));
}
}
}
//使用cv::fitline函数 将点数组 拟合成直线
cv::Vec4f line; //(cos, sin, x0,y0)
cv::fitLine(cv::Mat(points), line, CV_DIST_L2, 0, 0.01, 0.01);
std::cout
关注
打赏
最近更新
- 深拷贝和浅拷贝的区别(重点)
- 【Vue】走进Vue框架世界
- 【云服务器】项目部署—搭建网站—vue电商后台管理系统
- 【React介绍】 一文带你深入React
- 【React】React组件实例的三大属性之state,props,refs(你学废了吗)
- 【脚手架VueCLI】从零开始,创建一个VUE项目
- 【React】深入理解React组件生命周期----图文详解(含代码)
- 【React】DOM的Diffing算法是什么?以及DOM中key的作用----经典面试题
- 【React】1_使用React脚手架创建项目步骤--------详解(含项目结构说明)
- 【React】2_如何使用react脚手架写一个简单的页面?