作者Vvvahc (我来搞事了)
看板C_and_CPP
标题[问题] 请问如何提取单点周遭的座标资讯
时间Sat Jun 4 19:54:44 2022
各位前辈好
小弟最近要开发具有fitting点的功能(用於光斑侦测)
在这之前,必须先计算出该光斑内所有的点位置(假设光斑大小刚好涵盖3*3个pixel,我
想取得包含光斑内共5*5个pixel的所有资料)
那麽假设我先在分析图案上,用blob选定了一点(x1,y1)
该点的强度与位置能使用opencv的ptr获取
那如果我想提取已该点为中心,向外扩展使用者自订的n*n矩阵中,所有点的资讯
例如: 我在image上抓到一点O,该如何做才能自动获得以O为中心
5*5的范围内所有a点的x轴、y轴座标资讯呢?
. . . . . . . .
. . . . . . . .
. a a a a a . .
. a a a a a . .
. a a O a a . .
. a a a a a . .
. a a a a a . .
. . . . . . . .
. . . . . . . .
可能问题有点白痴
我知道可以操控像是i+1、j-1等,将个别点存入[ ]中
但我一开始侦测到的点(例如O点)的资料型态是vector < vector < point > >
实在是不晓得该如何将周遭x与y的资料分开并抽出来
恳请板上高手指点迷津
谢谢><
--
※ 发信站: 批踢踢实业坊(ptt.cc), 来自: 223.141.86.158 (台湾)
※ 文章网址: https://webptt.com/cn.aspx?n=bbs/C_and_CPP/M.1654343686.A.8C2.html
※ 编辑: Vvvahc (223.141.86.158 台湾), 06/04/2022 19:58:36
1F:→ nh60211as: Mat(Rect) ?06/04 20:26
※ 编辑: Vvvahc (125.230.97.22 台湾), 06/04/2022 20:35:05
2F:→ Vvvahc: rect是以该点为左上角起点,分别向下及向右取范围资料06/04 20:38
3F:→ Vvvahc: 跟我预设该点为中心来取周围值好像有点不一样06/04 20:38
4F:推 wulouise: input output 写明确一点..06/04 20:57
5F:→ Vvvahc: input :06/04 21:05
6F:→ Vvvahc: vector<vector<point>> initial_point06/04 21:05
7F:→ Vvvahc: 我希望output 可以导出initial_point06/04 21:05
8F:→ Vvvahc: (例如上面的O点)周围5*5的区域中,每个点的x值与y值06/04 21:05
9F:→ Vvvahc: (会有2笔储存资料,一笔是所有的x点位置,另一笔是所有y点06/04 21:05
10F:→ Vvvahc: 位置)06/04 21:05
※ 编辑: Vvvahc (125.230.97.22 台湾), 06/04/2022 21:33:25
11F:→ LPH66: 所以输入是表示什麽? 型态是点座标的二维阵列, 06/05 00:27
12F:→ LPH66: 为什麽会是二维阵列? 它表示了什麽东西? 06/05 00:27
13F:→ LPH66: 你抓到的「那一点 O」会怎麽出现在这个二维阵列中? 06/05 00:28
14F:→ LPH66: 上面问的「写明确一点」是要你去了解这些问题 06/05 00:29
15F:→ LPH66: 不然连你都不知道你抓的东西怎麽表示了我们怎麽知道怎麽做? 06/05 00:29
16F:→ LPH66: 那如果 (我的水晶球突然亮了) 这其实才是你的问题所在 06/05 00:30
17F:→ LPH66: 那你应该要详细地说你用 opencv 是怎麽写去抓到的资料 06/05 00:31
18F:→ LPH66: 只写一个「用 ptr 获取」我们哪知道你的 ptr 是什麽... 06/05 00:32
19F:推 OnlyRD: 原po应该是不知道去哪找来两段演算法程式,前段输 06/05 04:42
20F:→ OnlyRD: 出一个2维稀疏 06/05 04:42
21F:→ OnlyRD: 的光斑矩阵,後段需要x,y两轴各自纪录一轴位置范围 06/05 04:42
22F:→ OnlyRD: 的阵列,然後 06/05 04:42
23F:→ OnlyRD: 不想花心力看懂两段算法跟他们的资料结构,所以连 06/05 04:42
24F:→ OnlyRD: 问题都问不清楚 06/05 04:42
25F:→ OnlyRD: 。 06/05 04:42
26F:→ Vvvahc: 对 我使用opencv的findcontours(Mat intput_img, vector 06/05 11:42
27F:→ Vvvahc: <vector<point>> contours,vector<Vec4i>hierarchy) 06/05 11:42
28F:→ Vvvahc: 其中contours会储存侦测到的点 06/05 11:45
29F:→ Vvvahc: 但我不晓得该如何有效取出x、y的一维阵列资料 06/05 11:45
30F:→ Vvvahc: 以及操作取得这点周围所有点的一维资料 06/05 11:48
31F:推 lycantrope: drawContours->dilate->mask 06/05 14:31
32F:推 wulouise: 拜见楼上几位通灵王<o> 06/05 15:32
33F:→ Vvvahc: 抱歉 可能我是c++新手不晓得要怎麽实作功能出来,也表达 06/05 18:20
34F:→ Vvvahc: 不够清楚 06/05 18:20
35F:→ Vvvahc: 如果可以的话,请至少告诉我资料型态为二维向量的点,该如 06/05 18:20
36F:→ Vvvahc: 何有效率的获取该点周围共8个点的一维向量就好 06/05 18:20
37F:推 LPH66: 那这就是你没有搞清楚 opencv 是怎麽回传它看到的东西了 06/05 22:17
38F:→ LPH66: findContours 回给你的二维阵列, 第一维是各 contour 06/05 22:18
39F:→ LPH66: 第二维是 contour 座标; 那你这里就要想想到底 06/05 22:18
40F:→ LPH66: findContours 是不是真的是你要的, 因为它是回传 06/05 22:19
41F:→ LPH66: 绕这一个 contour 四周的座标, 但你却想要中心亮斑座标 06/05 22:19
42F:→ LPH66: opencv 回给你边界, 你想要的是中间, 那难怪你无从下手 06/05 22:20
43F:→ LPH66: 你去问问你的同事或其他做过类似功能的人他们是用什麽函数 06/05 22:22
44F:推 lycantrope: contour(轮廓),想要重心可以用cv::moments 06/06 09:29