qq_24076833 2020-07-15 11:08 采纳率: 0%
浏览 220
已采纳

c++如何根据变量的值决定另一个变量的类型?

比如我要对opencv矩阵中的每个元素取对数,矩阵元素的类型有uchar,char,ushort,short,int,float,double7种,但7种都是数值类型,我想返回一个与输入矩阵size和type都相同的对数矩阵,我该怎么做,如果用条件判断我该用什么保存数据类型,试过#define,typedef好像都不行,#define在预编译期间就会确定,条件语句无法约束它,typedef会重定义报错。

比如下面代码中的ELEMTYPE应该怎么实现:

Mat logImg(Mat img){
    Mat res(img.size(), CV_8U);
    if (img.channels() == 3) {
        cvtColor(img, img, CV_BGR2GRAY);
    }
    switch(img.depth()){
        case CV_8U:
            //ELEMTYPE=uchar;
        case CV_8S:
            //ELEMTYPE=char;
        case CV_16U:
            //ELEMTYPE=ushor;
        case CV_16S:
            //ELEMTYPE=short;
        case CV_32S:
            //ELEMTYPE=int;
        case CV_32F:
            //ELEMTYPE=float;
        case CV_64F:
            //ELEMTYPE=double;
    }
    for(int i=0;i<img.rows;i++){
        for(int j=0;j<img.cols;j++){
            res.at<uchar>(i,j)=(uchar)(log(img.at<ELEMTYPE>(i,j)+1)*255/log(256));
        }
    }
}
  • 写回答

1条回答 默认 最新

  • bobhuang 2020-07-15 11:21
    关注

    比较好的办法是用矩阵运算,而不是对每个元素自己写计算操作。opencv内部有些SIMD计算加速,或者显卡加速等机制,比循环效率高。
    参考:
    https://blog.csdn.net/spw_1201/article/details/53482877

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

悬赏问题

  • ¥100 求数学坐标画圆以及直线的算法
  • ¥35 平滑拟合曲线该如何生成
  • ¥100 c语言,请帮蒟蒻写一个题的范例作参考
  • ¥15 名为“Product”的列已属于此 DataTable
  • ¥15 安卓adb backup备份应用数据失败
  • ¥15 eclipse运行项目时遇到的问题
  • ¥15 关于#c##的问题:最近需要用CAT工具Trados进行一些开发
  • ¥15 南大pa1 小游戏没有界面,并且报了如下错误,尝试过换显卡驱动,但是好像不行
  • ¥15 自己瞎改改,结果现在又运行不了了
  • ¥15 链式存储应该如何解决