【发布时间】:2021-03-01 16:53:55
【问题描述】:
根据cv::Mat Class Reference,构造函数之一是:
Mat (int rows, int cols, int type, void *data, size_t step=AUTO_STEP)
现在,我有 rs2::frame,我想将它们转换为 cv::Mat。所以,我定义了一个函数,在转换中,我想指定cv::Mat::type,即输出cv::Mat的类型是CV_8SC1还是CV_16SC1等等。
到目前为止,我的功能是这样的:
cv::Mat foo(rs2::frame fr, std::string mat_type) {
.
.
.
}
对于mat_type,如上所示,我正在传递字符串,即"CV_8SC1"、"CV_16SC1"等,在函数体中,我手动比较字符串:
.
.
if(mat_type == "CV_8SC1") {
return cv::Mat(width, height, CV_8SC1, ...);
} else if ...
.
.
.
else {
}
但是,这不是很有效,对吧?假设将来,如果我需要另一种类型的 cv::Mat,那么我必须通过在 if... else... 语句中添加新条件来更新函数。
那么,我怎样才能避免这种情况并做一些更有效的事情呢?我的意思是,有没有办法直接传递cv::Mat::type,而不是传递一个等效的字符串,然后在函数体中进行比较?
只是为了提前澄清:我的问题与这些问题不同:
【问题讨论】: