gpt4 book ai didi

c# - 在图像上查找区域 - 自动旋转图像 OpenCv

转载 作者:塔克拉玛干 更新时间:2023-11-03 06:49:50 26 4
gpt4 key购买 nike

我有一张图片,我想旋转这张图片,使其变成这样:旋转必须是自动的。另一方面必须计算旋转角度。

[1 - 图片]

enter image description here

对于 openCV 上的这种轮换有什么想法吗?

我怎样才能在这张图片上提取一个小矩形呢?像这样 :(我用红色标记了一些区域)

[2 - 图片]

enter image description here

有没有办法从 OpenCV 上的这张图片中提取这个区域?

最佳答案

我不知道 openCV,但你添加了 C# 和 C++ 标签,这让我假设你会接受可以用这些语言实现的算法。

回答你的第一个问题:

如果您的图像与您提供的图像都相似,您可以这样做(这些步骤不一定是连续的步骤,它们编号只是为了便于引用):

  1. 转换为黑白(如果您愿意,您可以仅在概念上执行此操作,方法是将像素值与阈值进行比较,如下所示)

  2. 以垂直、水平和对角单像素步长沿着黑色轮廓行进

  3. 在旅行时记住 N 对坐标,以便 N 低于图像直线的预期最小长度(以像素为单位)(您将不得不调整 N:太长会得到太少的数据,太短会给你带来太多噪音)

  4. 从当前点坐标和后退N点,计算mq
    y = m x + q 如果 abs(Δx) ≤ abs(Δy)m'q' of x = m' y + q' 否则,并根据您需要的分辨率制作 4 个直方图

  5. 稍微平滑一下您的直方图(例如,通过向每个 channel 添加其相邻 channel 的一些值)

  6. 找到 mm'qq' 的最大值,并且,在移除 qq' 的最大值周围之后,qq'< 的另外 2 个(局部)最大值;这些将是您对矩形的 4 条边界线方程参数的估计,使用 m ≅ -m'(取决于您想要的最终结果,您可以使用 mm',或者,例如 (m-m')/2)

  7. 找到将矩形置于所需位置的旋转或仿射变换(例如,上述两条线的交点可能必须变换到某个位置),并应用它

第 2 点是通过在每一步找到当前像素周围 8 个可能的圆形探索中的第一个黑色像素来完成的,该像素以上一步的像素结束。例如,如果您的最后一步是在 NE(东北)方向,并且您正沿着等高线顺时针方向行进,您将按以下顺序探索周围环境:NW、N、NE、E、SE、S、SW(缺少 W因为如果它是黑色的,它会被上一步选中)。您可以通过线扫描找到起始像素(如果是反向线扫描,它将使您到达E方向,或W方向)。

您还应该计算轮廓的长度(以步长为单位)。如果它比您预期的要短得多,您应该丢弃它并再次尝试,直到找到“真正的”轮廓。

关于c# - 在图像上查找区域 - 自动旋转图像 OpenCv,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17632169/

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