可以将0.0改为0,或者将distances.begin()改为distances.begin().operator float(),两种方法都可以解决该错误。修改后的代码如下:
Mat image = imread("scale.jpg", 0);
Mat edges;
Canny(image, edges, 50, 150, 3);
vector lines;
HoughLines(edges, lines, 1, CV_PI / 180, 50, 0, 0);
vector distances;
for (size_t i = 0; i < lines.size(); i++) {
float rho = lines[i][0], theta = lines[i][1];
if (theta < CV_PI / 4 || theta > 3 * CV_PI / 4) {
Point pt1(rho / cos(theta), 0);
Point pt2((rho - edges.rows * sin(theta)) / cos(theta), edges.rows);
line(image, pt1, pt2, Scalar(0, 0, 255), 1);
}
else {
Point pt1(0, rho / sin(theta));
Point pt2(edges.cols, (rho - edges.cols * cos(theta)) / sin(theta));
line(image, pt1, pt2, Scalar(0, 0, 255), 1);
}
if (i > 0) {
float dist = abs(lines[i][0] - lines[i - 1][0]);
distances.push_back(dist);
}
}
float avg_dist = accumulate(distances.begin(), distances.end(), 0) / static_cast(distances.size());
cout << "Average distance between adjacent lines: " << avg_dist << endl;
imshow("Detected lines", image);
waitKey(0);