我有一张图片,我想旋转这张图片,就像这样:旋转必须是自动的。另一方面,必须计算旋转角度。
[1 - 图片]
在 openCV 上进行这种旋转有什么想法吗?
我怎样才能在这张图片上提取一个小矩形?像这样:(我用红色标记了一些区域)
[2 - 图片]
有什么想法可以从 OpenCV 上的这个图像中提取这个区域吗?
我有一张图片,我想旋转这张图片,就像这样:旋转必须是自动的。另一方面,必须计算旋转角度。
[1 - 图片]
在 openCV 上进行这种旋转有什么想法吗?
我怎样才能在这张图片上提取一个小矩形?像这样:(我用红色标记了一些区域)
[2 - 图片]
有什么想法可以从 OpenCV 上的这个图像中提取这个区域吗?
我不知道 openCV,但是您添加了 C# 和 C++ 标签,这让我假设您会接受可以用这些语言实现的算法。
要回答您的第一个问题:
如果您的图像都与您提供的图像相似,您可以这样做(这些不一定是顺序步骤,它们编号只是为了便于参考):
转换为黑白(如果您愿意,您可以仅在概念上执行此操作,通过将像素值与阈值进行比较,如下所示)
以垂直、水平和对角线单像素步长沿黑色轮廓行进
在旅行时记住 N 对坐标,以便 N 低于图像直线的预期最小长度(以像素为单位)(您必须调整 N:太长给你的数据太少,太短给你很多噪音)
从当前点的坐标和N点的坐标往后退,计算if或m
andq
的and ,并制作4个直方图,分辨率为你需要的y = m x + q
abs(Δx) ≤ abs(Δy)
m'
q'
x = m' y + q'
使您的直方图平滑一点(例如,通过向每个通道添加一点其相邻通道的值)
找到 , , 和 的最大值,和m
,在去除 和 的最大值的周围后,和的另外 2 个 (局部) 最大值; 这些将是您对矩形 4 条边界线方程的参数的估计,其中(取决于您可以使用的最终结果,或,例如)m'
q
q'
q
q'
q
q'
m ≅ -m'
m
m'
(m-m')/2
找到将矩形置于所需位置的旋转或仿射变换(例如,上述两条线的交点可能必须变换到某个位置),然后应用它
第 2 点是通过在每个步骤中找到 8 个可能的黑色像素中的第一个黑色像素来完成的,该像素围绕当前像素进行循环探索,该循环以上一步的像素结束。例如,如果您的最后一步是在 NE(东北)方向,并且您沿着等高线顺时针行驶,则您按以下顺序探索周围环境:NW、N、NE、E、SE、S、SW(W 缺失因为如果它是黑色的,它就会被上一步选中)。您可以通过线扫描找到起始像素(这将使您到达 E 方向,或者在反向线扫描的情况下到达 W 方向)。
您还应该计算轮廓的长度(以步长为单位)。如果它比您预期的要短得多,您应该丢弃它并再次尝试,直到找到“真实”轮廓。