所以我试图使用行和列值来获取矩阵的值,这是我不知道的类型。我基本上想要实现以下内容:
bool someFunction(cv::Mat m){
return m(1,0) != 0;
}
我知道这会出错,因为我需要指定类型 m.at<输入>(1,0) 但我不知道这种类型。
我尝试过以下操作: m.at< m.type()>(1,0),但当然是错误。
我想知道什么可能在这里工作。谢谢!
答案 0 :(得分:1)
一个不那么优雅的解决方案。使用depth和切换案例。
#include<cv.h>
#include<stdint.h>
using namespace cv;
using namespace std;
bool someFunction(Mat m) {
switch (m.depth()){
case CV_8U:
return m.at<uint8_t>(1,0) != 0;
case CV_8S:
return m.at<int>(1,0) != 0;
case CV_16U:
return m.at<uint16_t>(1,0) != 0;
case CV_16S:
return m.at<int16_t>(1,0) != 0;
case CV_32S:
return m.at<int32_t>(1,0) != 0;
case CV_32F:
return m.at<float>(1,0) != 0;
case CV_64F:
return m.at<double>(1,0) != 0;
}
}
int main() {
Mat m(2,2, CV_8UC1);
cout << someFunction(m) << endl;
}
答案 1 :(得分:-1)
我假设您正在为单通道图像执行此操作,但即使对于&gt;您也会有所了解。 1频道图片。
您可以将功能更改为
template<class T>
bool someFunction(cv::Mat_<T> m) {
return m(1,0) != 0;
};
你可以调用函数 -
someFunction<uchar>(gray);
在这里,我假设你从你正在调用的函数中知道了类型。
代替uchar
,您可以使用 Mat 对象所属的任何数据类型。
如果您还想自动执行此任务,请检查here。