mindspore::dataset::GetAffineTransform的输出与cv2的输出不同
创始人
2024-01-21 00:16:24
0

在使用C++进行推理时用到了函数mindspore::dataset::GetAffineTransform,但是输入相同的数据后,与Python的cv2中的同名函数cv2.getAffineTransform所输出的结果不同。

C++ Ascend310端测试核心代码
 

#include 
#include #include "include/dataset/lite_cv/lite_mat.h"
#include "include/dataset/lite_cv/image_process.h"using mindspore::MSTensor;
using mindspore::DataType;
using mindspore::dataset::LiteMat;
using mindspore::dataset::Point;
using mindspore::dataset::Affine;
using mindspore::dataset::GetAffineTransform;int main(int argc, char **argv) {float src[3][2] = {154.61, 90.4373,
154.61, 38.1699,
102.342, 38.1699,};float dst[3][2] = {144, 192,
144, 48,
0, 48,};mindspore::dataset::LiteMat trans;std::vector src_point = {Point(src[0][0], src[0][1]), Point(src[1][0], src[1][1]), Point(src[2][0], src[2][1])};std::vector dst_point = {Point(dst[0][0], dst[0][1]), Point(dst[1][0], dst[1][1]), Point(dst[2][0], dst[2][1])};int inv = 0;if (inv) mindspore::dataset::GetAffineTransform(dst_point, src_point, trans);else mindspore::dataset::GetAffineTransform(src_point, dst_point, trans);std::cout << "[D]trans: " << trans.width_ << ' ' << trans.height_ << std::endl;std::cout << *(float*)(trans.data_ptr_) << ' ' << *((float*)(trans.data_ptr_) + 1) << ' ' << *((float*)(trans.data_ptr_) + 2) << std::endl;std::cout << *((float*)(trans.data_ptr_ )+ 2 * 1 + 0) << ' ' << *((float*)(trans.data_ptr_ )+ 2 * 1 + 1) << ' ' << *((float*)(trans.data_ptr_) + 2 * 1 + 2) << std::endl;return 0;
}

程序运行环境为:Ascend310,Ubuntu18.04,g++8.1.0,mindspore1.8.0,mindspore-lite1.8.1 程序输出结果为:

[D]trans: 3 2
2.80742e-15 2.09438 0
0 -0 -3.64823e-16

Python cv2.getAffineTransform()

import numpy as np
import cv2src = np.array([[154.6097, 90.43735],[154.6097, 38.16989],[102.34224, 38.16989]])
dst = np.array([[144., 192.],[144., 48.],[0., 48.]])
inv = 0
if inv:trans = cv2.getAffineTransform(np.float32(dst), np.float32(src))
else:trans = cv2.getAffineTransform(np.float32(src), np.float32(dst))
print(trans)

程序运行环境为:CPU,Windows10,Python3.8.8,opencv4.6.0 程序输出结果为:

[[ 2.75506043e+00 -0.00000000e+00 -2.81959054e+02][ 9.19143827e-17  2.75506043e+00 -5.71603573e+01]]

问题

可以看到两者的输出完全不同。我想知道,这两个函数是否是对应关系,如果是的话,我的代码在哪里出了问题,如果不是的话,那么Mindspore在C++中是否有对应的API可以使用。

****************************************************解答*****************************************************

mindspore端侧的GetAffineTransform算子的功能是和opencv的getAffineTransform保持一致的。

我这边验证的结果是和opencv的一致。可能是std::cout的原因?打印的值不太一样?

这边可以参考一下这边的用例:tests/ut/cpp/dataset/image_process_test.cc

里面有对比计算值和期望值的方法AccuracyComparison。

相关内容

热门资讯

喜欢穿一身黑的男生性格(喜欢穿... 今天百科达人给各位分享喜欢穿一身黑的男生性格的知识,其中也会对喜欢穿一身黑衣服的男人人好相处吗进行解...
发春是什么意思(思春和发春是什... 本篇文章极速百科给大家谈谈发春是什么意思,以及思春和发春是什么意思对应的知识点,希望对各位有所帮助,...
网络用语zl是什么意思(zl是... 今天给各位分享网络用语zl是什么意思的知识,其中也会对zl是啥意思是什么网络用语进行解释,如果能碰巧...
为什么酷狗音乐自己唱的歌不能下... 本篇文章极速百科小编给大家谈谈为什么酷狗音乐自己唱的歌不能下载到本地?,以及为什么酷狗下载的歌曲不是...
华为下载未安装的文件去哪找(华... 今天百科达人给各位分享华为下载未安装的文件去哪找的知识,其中也会对华为下载未安装的文件去哪找到进行解...
怎么往应用助手里添加应用(应用... 今天百科达人给各位分享怎么往应用助手里添加应用的知识,其中也会对应用助手怎么添加微信进行解释,如果能...
家里可以做假山养金鱼吗(假山能... 今天百科达人给各位分享家里可以做假山养金鱼吗的知识,其中也会对假山能放鱼缸里吗进行解释,如果能碰巧解...
一帆风顺二龙腾飞三阳开泰祝福语... 本篇文章极速百科给大家谈谈一帆风顺二龙腾飞三阳开泰祝福语,以及一帆风顺二龙腾飞三阳开泰祝福语结婚对应...
四分五裂是什么生肖什么动物(四... 本篇文章极速百科小编给大家谈谈四分五裂是什么生肖什么动物,以及四分五裂打一生肖是什么对应的知识点,希...
美团联名卡审核成功待激活(美团... 今天百科达人给各位分享美团联名卡审核成功待激活的知识,其中也会对美团联名卡审核未通过进行解释,如果能...