Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/opencv/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 如何在自己的函数中最好地处理Mat中的不同数字格式_C++_Opencv_Opencv3.0 - Fatal编程技术网

C++ 如何在自己的函数中最好地处理Mat中的不同数字格式

C++ 如何在自己的函数中最好地处理Mat中的不同数字格式,c++,opencv,opencv3.0,C++,Opencv,Opencv3.0,当使用OpenCV编写自己的函数,这些函数使用img.at(y,x),img.at(y,x),…,访问单像素值时,输入矩阵必须采用正确的格式。我可以想象一些不同的方法使这样的函数能够处理不同类型的Mat 在执行其他操作之前,将src转换为正确的格式。在“降级”数字空间的情况下,这可能会导致一些信息丢失,或者在“升级”的情况下(如果我没有弄错的话)会导致一些效率损失。但也许转换成CV_64U仍然非常有效 对于每一种输入矩阵,创建一个整体函数似乎并不十分优雅,但由于我是C++新手,我可能不习惯它。

当使用OpenCV编写自己的函数,这些函数使用
img.at(y,x)
img.at(y,x)
,…,访问单像素值时,输入矩阵必须采用正确的格式。我可以想象一些不同的方法使这样的函数能够处理不同类型的
Mat

  • 在执行其他操作之前,将
    src
    转换为正确的格式。在“降级”数字空间的情况下,这可能会导致一些信息丢失,或者在“升级”的情况下(如果我没有弄错的话)会导致一些效率损失。但也许转换成
    CV_64U
    仍然非常有效

  • 对于每一种输入矩阵,创建一个整体函数似乎并不十分优雅,但由于我是C++新手,我可能不习惯它。

  • 创建if-else语句以区分函数本身中的
    Mat
    类型

  • 还有其他我不知道的方法吗?是否有一种方法在效率、编码优雅性和工作效率方面是最好的

    下面是一个小函数示例:

    myfoo(const Mat& src, Mat& dst)
    {
        dst = src.clone();
        for (int i = 0; i < dst.rows; i++)
            for (int j = 0; j < dst.cols; j++)
            {
                dst.at<uchar>(i, j) = i * j;
            }
    } 
    
    myfoo(施工材料和src、材料和dst)
    {
    dst=src.clone();
    对于(int i=0;i
    我认为您应该使用模板功能。看

    试试这个:

    template <class T>
    myfoo(const Mat& src, Mat& dst)
    {
        dst = src.clone();
        for (int i = 0; i < dst.rows; i++)
            for (int j = 0; j < dst.cols; j++)
            {
                dst.at<T>(i, j) = i * j;
            }
    }
    
    模板
    myfoo(施工材料和src、材料和dst)
    {
    dst=src.clone();
    对于(int i=0;i

    您可以使用myfoo(src,dst)调用它。

    我认为您应该使用模板函数。看

    试试这个:

    template <class T>
    myfoo(const Mat& src, Mat& dst)
    {
        dst = src.clone();
        for (int i = 0; i < dst.rows; i++)
            for (int j = 0; j < dst.cols; j++)
            {
                dst.at<T>(i, j) = i * j;
            }
    }
    
    模板
    myfoo(施工材料和src、材料和dst)
    {
    dst=src.clone();
    对于(int i=0;i
    您可以使用
    myfoo(src,dst)