繁体   English   中英

从图像中找到直线角

[英]Find corner in line from image

在 C# 中,我试图找到图像中的角落。 图像是使用相机拍摄的,因此并非每次拍摄都完全相同。

用相机拍摄的图像如下所示:

原图

我已经成功地获得了暗/亮部分的顶部边缘。 在这条线上,我想找到角落。

这是我从图像中获得的数据数组。 数组中带有 0 的项是图像中未​​找到暗/亮边缘的列:

int[] items = { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 338, 336, 335, 335, 335, 334, 334, 334, 334, 334, 334, 334, 334, 333, 333, 333, 333, 332, 332, 332, 332, 332, 332, 332, 332, 331, 331, 331, 331, 331, 331, 331, 331, 330, 330, 329, 329, 329, 328, 328, 327, 327, 326, 326, 326, 325, 325, 325, 325, 325, 324, 324, 324, 324, 324, 324, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 322, 322, 322, 322, 322, 322, 322, 322, 322, 322, 322, 322, 322, 322, 322, 322, 322, 322, 322, 322, 322, 322, 322, 322, 322, 322, 322, 322, 321, 321, 321, 321, 321, 321, 321, 321, 321, 321, 321, 321, 321, 321, 321, 321, 321, 321, 321, 321, 321, 321, 321, 321, 321, 321, 321, 321, 321, 321, 321, 321, 321, 321, 321, 321, 321, 321, 321, 321, 321, 321, 321, 321, 321, 321, 321, 321, 321, 321, 321, 321, 320, 320, 320, 320, 320, 320, 320, 320, 320, 320, 320, 320, 320, 320, 320, 320, 320, 320, 320, 320, 320, 320, 320, 320, 320, 320, 320, 320, 320, 320, 320, 320, 320, 320, 320, 320, 320, 320, 320, 320, 320, 320, 320, 320, 320, 320, 320, 320, 320, 320, 320, 320, 320, 320, 320, 320, 320, 320, 320, 320, 320, 319, 319, 319, 319, 319, 319, 319, 319, 319, 319, 319, 319, 319, 319, 319, 319, 319, 319, 319, 319, 319, 319, 319, 319, 319, 319, 319, 319, 319, 319, 319, 319, 319, 319, 319, 319, 319, 319, 319, 318, 318, 318, 318, 318, 318, 318, 318, 318, 317, 317, 317, 317, 317, 317, 317, 317, 316, 316, 316, 316, 316, 316, 315, 315, 315, 315, 315, 315, 314, 314, 314, 314, 314, 313, 313, 313, 313, 313, 313, 312, 312, 312, 312, 312, 311, 311, 311, 311, 311, 310, 310, 310, 310, 309, 309, 309, 309, 308, 308, 308, 308, 307, 307, 307, 307, 307, 306, 306, 306, 305, 305, 305, 305, 304, 304, 304, 304, 304, 303, 303, 303, 303, 302, 302, 302, 302, 301, 301, 301, 301, 300, 300, 300, 300, 299, 299, 299, 299, 299, 298, 298, 298, 298, 297, 297, 297, 297, 297, 296, 296, 296, 296, 296, 295, 295, 295, 295, 295, 294, 294, 294, 294, 293, 293, 293, 293, 293, 293, 292, 292, 292, 292, 292, 292, 291, 291, 291, 291, 291, 291, 291, 291, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 289, 289, 289, 289, 289, 289, 289, 289, 289, 289, 289, 289, 289, 289, 289, 289, 290, 290, 290, 290, 290, 291, 291, 291, 292, 292, 293, 294, 294, 295, 295, 296, 297, 298, 299, 300, 300, 301, 302, 303, 304, 305, 306, 307, 308, 310, 311, 313, 315, 317, 320, 323, 327, 337, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 };

当放在 Excel 中时,这给出了以下行: Excel图表

现在我正在寻找一种合适的方法来找到角点,我已经尝试了多种方法,但是使用相同对象的相机拍摄的不同图像的结果差异很大。 所以我正在寻找一种更好地实现这一点的方法(可能有一个我不知道的算法)。

我要搜索的点是下图中两条红线交叉的位置: 带有绘制线条的 Excel 图表

如何从我拥有的数组中计算/找到那两条红线?

应用阈值使图像二值化,提取边界像素,然后使用霍夫变换得到直线并选择投票最多的。

明智的做法是使用一些图像库,如 OpenCV 或其他适合 c# 的库

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM