- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
我正在使用 Opencv python 接口(interface)并获得了单应矩阵 H。它似乎工作正常,因为我可以使用扭曲透视从源图像中获取扭曲图像。我现在尝试使用 H 和 Inverse H 在两个坐标之间来回变换一个点(不是图像),但没有得到预期的结果。
为了得到矩阵,我这样做了:
pts1 = np.float32(corners)
pts2 = np.float32([[0,0], [400,0], [400,400], [0,400]])
self.transform_matrix = cv2.getPerspectiveTransform(pts1, pts2)
给定此矩阵,我使用以下内容进行正向和反向变换:
def transformPoints(self, x, y, reverse=False, integer=True):
if reverse == False:
H = self.transform_matrix
else:
val, H = cv2.invert(self.transform_matrix)
# get the elements in the transform matrix
h0 = H[0,0]
h1 = H[0,1]
h2 = H[0,2]
h3 = H[1,0]
h4 = H[1,1]
h5 = H[1,2]
h6 = H[2,0]
h7 = H[2,1]
h8 = H[2,2]
tx = (h0*x + h1*y + h2)
ty = (h3*x + h4*x + h5)
tz = (h6*x + h7*y + h8)
if integer==True:
px = int(tx/tz)
py = int(ty/tz)
Z = int(1/tz)
else:
px = tx/tz
py = ty/tz
Z = 1/tz
return (px, py)
现在,如果我这样做:
s, t = 100,200
print "s=%d, t=%d" % (s,t)
a, b = pt.transformPoints(s,t)
print "a=%d, b=%d" % (a,b)
c, d = pt.transformPoints(a, b, True)
print "c=%d, d=%d" % (c,d)
这是它打印的内容:a=395, b=169c=91, d=226
我期望 c=100 和 d=200,或者至少接近。
这是矩阵,它是逆矩阵。
H矩阵
[[ -1.01486350e-01 -1.99156329e+01 8.44058060e+02]
[ 1.82486862e+00 3.62765073e-01 -1.49259809e+03]
[ -4.43678849e-03 -4.28012674e-02 1.00000000e+00]]
逆:
[[ 4.13378829e-01 1.05495739e-01 -1.91452995e+02]
[ -3.12201095e-02 -2.37099792e-02 -9.03788455e+00]
[ 4.97814178e-04 -5.46754880e-04 -2.36269358e-01]]
我尝试做一个点积,它似乎生成了一个单位矩阵:
[[ 1.00000000e+00 1.77635684e-15 -5.68434189e-14]
[ -6.93889390e-18 1.00000000e+00 5.32907052e-15]
[ -2.16840434e-19 1.73472348e-18 1.00000000e+00]]
感谢任何帮助。
最佳答案
第二行有错别字
tx = (h0*x + h1*y + h2)
ty = (h3*x + h4*x + h5)
tz = (h6*x + h7*y + h8)
h4
应该乘以 y
坐标
关于python - Opencv Homography matrix H and Inverse H to transform a point 没有得到预期的结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32366786/
我有一段这样的代码。我发现 myResults = writer.getBuffer().toString(); 对某些用例返回 EMPTY STRING,但对其他用例则不返回。 我查看了服务器,但在
如何使用 javascript 通过 id 更改元素中的 -webkit-transform 、-moz-transform 、-o-transform 和 -ms-transform css? 这段
我正在使用 javax.xml.transform.Transformer.transform() 通过 xsl 样式表将一个 xml 转换为另一个 xml。我想以编程方式设置第一级 child 的排
为了使 seaborn.pairplot() 正常工作,在 jupyter notebook 中执行了以下步骤。 /usr/local/lib/python2.7/site-packages/matp
假设这个输入 XML 编写这些代码行: StreamSource source = new StreamSource(new StringReader(/* the above XML*/));
如何在 spring 框架中配置 java.xml.transform.Transformer ?我需要转换器的实例来通过 xslt 将 xml 转换为文本。因此,配置的转换器应该了解 xslt 样式
我一直在核心数据中使用可转换属性,将图像和颜色等复杂对象转换为原始数据。我拿了this ... The idea behind transformable attributes is that you
我正在尝试打开 XML 文件,添加一些更改,然后保存到其他 XML 文件结果。我正在使用标准 javax.xml.parsers.* 和 javax.xml.transform* 类。 但在保存的文档
Transformer(变换方法)对输入源的大小有限制吗? 我正在尝试转换一个相当长的 (18M) XML,但收到一个奇怪的错误 "The element type "HR" must be term
我正在尝试解析一个非常简单的示例: 100 我使用的样式表如下: 这在 libxs
来自文档 for from_pretrained ,我知道我不必每次都下载预训练的向量,我可以使用以下语法保存它们并从磁盘加载: - a path to a `directory` contain
默认缓存目录磁盘容量不足,我需要更改默认缓存目录的配置。 最佳答案 您可以在每次加载模型时指定缓存目录 .from_pretrained通过设置参数cache_dir .您可以通过导出环境变量 TRA
有一个函数,例如: CATransform3DGetAffineTransform Returns the affine transform represented by 't'. If 't' ca
我有一个包含 WCF 设置的配置文件: “add”元素只有一个 baseAddress 属性,所以我不能使用 Match 定位器。一种方法如何像我的示例中那样转换多个元素? 最
在收到下面链接中描述的错误后,我已将实体属性的 Transfomer 设置为 NSSecureUnarchiveFromData(之前为 nil)。 CoreData crash error Xcod
当我写Document时使用 Transformer 的 transform() 方法转换为 XML,生成的 XML 文档的格式很好 - 所有元素都写在单独的行上并缩进。除了第一个元素与定义写在同一行
我不明白 StreamResult 实例会发生什么。我看到 Transformer 对象接收 source 和 streamResult: transformer.transform(sour
从下面的代码片段我应该得出结论,std::transform 比 boost::transform 更受欢迎,因为前者使用更少的初始化和析构函数可能更有效比后者? #include #include
transform() 可以将函数应用到序列的元素上,并将这个函数返回的值保存到另一个序列中,它返回的迭代器指向输出序列所保存的最后一个元素的下一个位置。 这个算法有一个版本和 for_each()
我是 react-native 的新手。在项目上将 react-native 从 0.48.3 升级到 0.62.2 后,运行“react-native run-ios”命令时出现错误:“index.
我是一名优秀的程序员,十分优秀!