opencv二值图 想找到所有非零点的坐标 然后用cvFitLine对这些进行...
发布网友
发布时间:2023-12-22 23:28
我来回答
共1个回答
热心网友
时间:2024-08-14 14:29
std::vector<cv::Point> points;
//mat为你的二值图像
for(int j = 0; j < mat.rows; j++)
{
uchar* ptr = mat.ptr<uchar>(j);
for(int i = 0; i < mat.cols; i++)
{
if(ptr[i])
points.push_back(cv::Point(i, j));
}
}
cv::Vec4f line;
cv::fitLine(cv::Mat(points), line, CV_DIST_L2, 0, 0.01, 0.01);
//设线的长度为100像素
int x0 = line[2];
int y0 = line[3];
int x1 = x0 - 100 * line[0];
int y1 = y0 - 100 * line[1];
//image为你要画线的图像
cv::line(image, cv::Point(x0, y0), cv::Point(x1, y1), cv::Scalar(0, 0, 255));
试试看