gpt4 book ai didi

c++ - 我对找到图像中大多数线的交点感到震惊

转载 作者:行者123 更新时间:2023-11-28 07:49:57 25 4
gpt4 key购买 nike

我使用标准的霍夫变换通过 OpenCV 获得图像中的直线。现在,我需要找到图像中大部分线的交点的 x 和 y 坐标。我的想法是将图像分成几个 8*8 像素的片段(我还没有决定大小),然后在该区域中搜索线条。但我不确定如何计算段中的行数。我在这一点上感到震惊。所以我无法做的事情(使用 openCV)是1.将图像分成8*8像素段(不知道有没有功能,没有怎么办)2.计算每个段中的行数。任何阅读 Material 或代码提示都将非常有帮助。

最佳答案

您检测交叉点的方法完全错误。有一个简单的数学公式。我给你一个纯 C 的示例代码。:

// This is a point
typedef struct{
int x,y;
} MYintPOINT;

// This is line
typedef struct {
MYintPOINT pStart;
MYintPOINT pEnd;
} MyLine;

#define PointMinusPoint(P,Q,R) {(P).x = (Q).x - (R).x; (P).y = (Q).y - (R).y;}
#define PointCross(P,Q) (((P).x*(Q).y)-((P).y*(Q).x))
#define SIGN(X) (((X)>=0)? 1:-1 )
#define ABS(a) ((a) >= 0 ? (a) : (-(a)))
#define ROUND(a) ((SIGN(a)) * ( ( int )( ABS(a) + 0.5 ) ) )

// Given 2 line segments, find their intersection point
// rerurns [Px,Py] point in 'res' or FALSE if parallel. Uses vector cross product technique.
int findLinesIntersectionPoint(const MyLine*l1, const MyLine*l2, MYintPOINT *res){
MYintPOINT p = l1->pStart;
MYintPOINT dp;
MYintPOINT q = l2->pStart;
MYintPOINT dq;
MYintPOINT qmp; // q-p
int dpdq_cross; // 2 cross products
int qpdq_cross; // dp with dq, q-p with dq
float a;

PointMinusPoint(dp,l1->pEnd,l1->pStart);
PointMinusPoint(dq,l2->pEnd,l2->pStart);
PointMinusPoint(qmp,q,p);

dpdq_cross = PointCross(dp,dq);
if (!dpdq_cross){
// Perpendicular Lines
return 0;
}

qpdq_cross = PointCross(qmp,dq);
a = (qpdq_cross*1.0f/dpdq_cross);

res->x = ROUND(p.x+a*dp.x);
res->y = ROUND(p.y+a*dp.y);
return 1;
}

关于c++ - 我对找到图像中大多数线的交点感到震惊,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14042397/

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