C++ 如何将'cv::Mat'的'type'传递给函数?
根据,其中一个构造函数是:C++ 如何将'cv::Mat'的'type'传递给函数?,c++,opencv,realsense,C++,Opencv,Realsense,根据,其中一个构造函数是: Mat (int rows, int cols, int type, void *data, size_t step=AUTO_STEP) 现在,我有,我想把它们转换成cv::Mat。因此,我定义了一个函数,在转换中,我想指定输出cv::Mat的类型是cv_8SC1还是cv_16SC1等等 现在,我的函数是这样的: cv::Mat foo(rs2::frame fr, std::string mat_type) { . . . }
Mat (int rows, int cols, int type, void *data, size_t step=AUTO_STEP)
现在,我有,我想把它们转换成cv::Mat
。因此,我定义了一个函数,在转换中,我想指定输出cv::Mat
的类型是cv_8SC1
还是cv_16SC1
等等
现在,我的函数是这样的:
cv::Mat foo(rs2::frame fr, std::string mat_type) {
.
.
.
}
#define CV_16S 3
对于mat_类型
,如上所示,我传递字符串,即“CV_8SC1”
,“CV_16SC1”
,在函数体中,我手动比较字符串:
.
.
if(mat_type == "CV_8SC1") {
return cv::Mat(width, height, CV_8SC1, ...);
} else if ...
.
.
.
else {
}
但是,这不是很有效,对吗?比如说,在将来,如果我需要另一种类型的cv::Mat
,那么我必须通过在中添加一个新条件来更新函数,如果。。。否则代码>语句
那么,我怎样才能避免这种情况,做一些更有效的事情呢?我的意思是,有没有办法直接传递cv::Mat::type
,而不是传递一个等价的字符串,然后在函数体中进行比较
先澄清一下:我的问题与这些问题不同:
传递cv::Mats的最佳实践是什么-
如何通过网络传递cv::Mat?-李>
请注意,类型的定义如下:
cv::Mat foo(rs2::frame fr, std::string mat_type) {
.
.
.
}
#define CV_16S 3
我认为您应该传递一个int
(或uint64\u t
,就像在OpenCV的源代码中一样):
然后调用函数并调用函数,如下所示:
yourFunction(fr, cv::CV_8SC1)
你可以看到定义,还有一个很酷的易于使用的矩阵
然后,在您的功能中执行一个切换情况:
switch(mat_type) {
case cv::CV_8SC1 : //Something
case cv::CV_32S : //Something else
.
.
.
}
无论如何,你必须为每种类型做一个案例(这是正常的)。
不要忘了访问cv
的必要性,无论你在哪里使用它如果你的问题是“你不认为运行时类型检查有点不切实际,并且在处理越来越多的类型时不能很好地扩展吗?”那么答案是肯定的,但当你使用诸如cv::Mat之类的类型擦除对象时,这就是你的签名
仅供参考,OpenCV中有一个cv::Mat
类型,您可以使用它,以防在编译时知道数据类型,并且不想丢失该信息。。。。在编译时分析数据类型