Blogs
TRestClient无法设置是否使用ipv4还是ipv6地址的问题
由 hubdog 于 星期六, 2021-03-27 23:31 发表找了半天没找到哪设置,只好将windows的ipv6协议禁掉了
无法调试Assembly的代码
由 hubdog 于 星期二, 2021-03-16 18:35 发表原因是Optimize Code被下面的语句给强制设为True了
[assembly: Debuggable(DebuggableAttribute.DebuggingModes.IgnoreSymbolStoreSequencePoints)]
https://stackoverflow.com/questions/48397353/visual-studio-optimizes-cod...
对点云数据做匹配合并
由 hubdog 于 星期二, 2021-02-16 15:27 发表经典的算法是ICP(iterative closest point),利用最小二乘法做点群匹配,算出转换矩阵。
利用opencv对摄像头做3D空间矫正
由 hubdog 于 星期二, 2021-02-16 15:05 发表标准的calibratecamera函数是对下面的方程求解
[u,v,1]=Intrincs*Transform*[x,y,z,1]
u,v,1对应的2D像素坐标,x,y,z,1对应空间坐标,求解的Intrincs是相机的内部参数,可以理解为相机各种焦距的3x3矩阵,Transform是一个旋转+平移的组合矩阵(3x4)
ret, mtx, dist, rvecs, tvecs = cv2.calibrateCamera(objpoints, imgpoints, gray.shape[::-1],None,None)
上边的mtx就是摄像机矩阵对应Intrincs,rvecs是旋转向量,tvecs是平移向量,dist是求解的误差系数
Transform矩阵可以使用罗德里格斯函数+平移向量组成
np.hstack((cv2.Rodrigues(rvecs[i])[0],tvecs[i]))
对于任意的3D空间坐标,可以用opencv的ProjectPoints来求解2D投影坐标
imgpoints2, _ = cv2.projectPoints(objpoints[i], rvecs[i], tvecs[i], mtx, dist)
postgresql的like查询优化
由 hubdog 于 星期二, 2021-02-16 14:51 发表前两天发现写的一个like查询性能很慢,看了一下查询计划是全表扫描。
发现postgresql 支持gin索引来对like查询优化,使用bitmap index来加速查询。
给字段添加了几个gin索引,现在查询速度飞快。
https://www.cybertec-postgresql.com/en/postgresql-more-performance-for-l...
三维平面的旋转
由 hubdog 于 星期二, 2021-02-09 20:31 发表平面方程式Ax+By+Cz+D=0
旋转实际上是法向量的旋转,也就是(A,B,C)的向量的旋转,根据旋转角度算出旋转矩阵,乘以法向量,
得到新的A2x+B2Y+C2z+D=0 这里平面方程的D保持不变。
计算空间2个向量夹角
由 hubdog 于 星期二, 2021-02-02 15:55 发表https://www.cnblogs.com/lovebay/p/11411512.html
注意算完叉积要做归一化,因为叉积对应sin函数的结果,sin的取值范围是-1,1
从点云数据用最小二乘法拟合平面
由 hubdog 于 星期二, 2021-02-02 13:12 发表使用新的THttpClient多线程下载文件
由 hubdog 于 星期日, 2021-01-03 10:53 发表最新的THttpClient组件替代了TIdHttp,调用的都是各个平台的原生api,天然支持https,不需要额外部署ssl的库。
unit CMain; interface uses System.SysUtils, System.Types, System.UITypes, System.Classes, System.Variants, FMX.Types, FMX.Controls, FMX.Forms, FMX.Graphics, FMX.Dialogs, FMX.Layouts, FMX.TreeView, System.Generics.Collections, System.Net.HttpClient, System.Net.URLClient; type TFormMain = class(TForm) tvDownload: TTreeView; tiRoot: TTreeViewItem; tiVideo: TTreeViewItem; tiEat: TTreeViewItem; tiFat: TTreeViewItem; tiNG: TTreeViewItem;