cv :: Mat,在不知道矩阵类型的情况下获取行列的值

时间:2014-10-13 21:43:34

标签: c++ opencv matrix

所以我试图使用行和列值来获取矩阵的值,这是我不知道的类型。我基本上想要实现以下内容:

bool someFunction(cv::Mat m){
   return m(1,0) != 0;
}

我知道这会出错,因为我需要指定类型 m.at<输入>(1,0) 但我不知道这种类型。

我尝试过以下操作: m.at< m.type()>(1,0),但当然是错误。

我想知道什么可能在这里工作。谢谢!

2 个答案:

答案 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