gpt4 book ai didi

c++ - 如何去除 canny 图像中的直线或非曲线

转载 作者:太空宇宙 更新时间:2023-11-03 10:25:29 25 4
gpt4 key购买 nike

我有一个精明的边缘图像 enter image description here

我想删除除了看起来像半圆/椭圆或“C”的线之外的所有线。尝试了 Hough Circle 变换,它检测所有曲线。不需要那个。

最佳答案

一个简单的方法是:

  1. 找到连接的组件
  2. 找到最小方向的边界框
  3. 计算盒子的纵横比,并检查它是否拉长太多。

在你的图片上,我用红色标记了几乎是直线的线,用绿色标记了曲线。您可以使用宽高比的阈值:

enter image description here

代码:

#include<opencv2/opencv.hpp>
using namespace cv;


int main()
{
// Load image
Mat1b img = imread("path_to_img", IMREAD_GRAYSCALE);

// Create output image
Mat3b out;
cvtColor(img, out, COLOR_GRAY2BGR);

// Find contours
vector<vector<Point>> contours;
findContours(img.clone(), contours, RETR_LIST, CHAIN_APPROX_NONE);

for (const auto& contour : contours)
{
// Find minimum area rectangle
RotatedRect rr = minAreaRect(contour);

// Compute aspect ratio
float aspect_ratio = min(rr.size.width, rr.size.height) / max(rr.size.width, rr.size.height);

// Define a threshold on the aspect ratio in [0, 1]
float thresh = 0.2f;

Vec3b color;
if (aspect_ratio < thresh) {
// Almost straight line
color = Vec3b(0,0,255); // RED
}
else {
// Curved line
color = Vec3b(0, 255, 0); // GREEN
}

// Color output image
for (const auto& pt : contour) {
out(pt) = color;
}
}

imshow("Out", out);
waitKey();

return 0;
}

关于c++ - 如何去除 canny 图像中的直线或非曲线,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37025890/

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