gpt4 book ai didi

c++ - 如何使用 OpenCV 拉直曲线?

转载 作者:太空宇宙 更新时间:2023-11-03 23:07:26 26 4
gpt4 key购买 nike

我有这样的曲线图像:

enter image description here

我找不到使用 OpenCV 拉直曲线的技术。类似于这篇文章Straightening a curved contour ,但我的问题特定于使用 opencv 进行编码(在 C++ 中更好)。

到目前为止,我只能找到曲线的轮廓。

enter image description here

int main()
{
Mat src; Mat src_gray;
src = imread("D:/2.jpg");
cvtColor(src, src_gray, COLOR_BGR2GRAY);
cv::blur(src_gray, src_gray, Size(1, 15));

Canny(src_gray, src_gray, 100, 200, 3);
/// Find contours
vector<vector<Point> > contours;
vector<Vec4i> hierarchy;
RNG rng(12345);
findContours(src_gray, contours, hierarchy, CV_RETR_TREE, CV_CHAIN_APPROX_SIMPLE, Point(0, 0));
/// Draw contours
Mat drawing = Mat::zeros(src_gray.size(), CV_8UC3);
for (int i = 0; i < contours.size(); i++)
{
drawContours(drawing, contours, i, (255), 1, 8, hierarchy, 0, Point());
}

imshow("Result window", drawing);
imwrite("D:/C_Backup_Folder/Ivan_codes/VideoStitcher/result/2_res.jpg", drawing);

cv::waitKey();
return 0;
}

但我不知道如何确定哪条线是弯曲的而不是弯曲的,以及如何拉直它。是否可以?任何帮助将不胜感激。

最佳答案

这是我的建议:

在一切之前,将您的图像调整为更大的图像(例如大 5 倍)。然后做你之前做的,得到轮廓。找到每个轮廓最右边的像素,然后测量该轮廓的所有像素并计算每个像素到最右边像素的水平距离并对该行(整行)进行移位。此方法右移到某些行,左移到其他行。

如果您有多个轮廓,计算每一行中每个轮廓的偏移值并计算它们的“平均值”,然后根据每一行的平均值进行偏移。

最后调整图片大小。这是我能想到的最简单、最快的事情。

关于c++ - 如何使用 OpenCV 拉直曲线?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56287500/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com